2
2
3
3
import pytest
4
4
from django .db import models
5
- from pydantic import ValidationError
5
+ from pydantic import BaseModel , ValidationError
6
6
7
- from ninja import ModelSchema
7
+ from ninja import ModelSchema , Schema
8
8
from ninja .errors import ConfigError
9
9
10
10
@@ -245,19 +245,28 @@ class Meta:
245
245
246
246
def test_desired_inheritance ():
247
247
class Item (models .Model ):
248
- id = models .PositiveIntegerField
248
+ id = models .PositiveIntegerField ( primary_key = True )
249
249
slug = models .CharField ()
250
250
251
251
class Meta :
252
252
app_label = "tests"
253
253
254
- class ProjectModelSchema (ModelSchema ):
254
+ class ProjectBaseSchema (Schema ):
255
+ # add any project wide Schema/pydantic configs
256
+ _omissible_serialize = (
257
+ "serializer_func" # model_serializer(mode="wrap")(_omissible_serialize)
258
+ )
259
+
260
+ class ProjectBaseModelSchema (ModelSchema , ProjectBaseSchema ):
255
261
_pydantic_config = "config"
256
262
257
- class ResourceModelSchema (ProjectModelSchema ):
263
+ class Meta :
264
+ primary_key_optional = False
265
+
266
+ class ResourceModelSchema (ProjectBaseModelSchema ):
258
267
field1 : str
259
268
260
- class Meta :
269
+ class Meta ( ProjectBaseModelSchema . Meta ) :
261
270
model = Item
262
271
fields = ["id" ]
263
272
@@ -268,25 +277,23 @@ class Meta(ResourceModelSchema.Meta):
268
277
model = Item
269
278
fields = ["id" , "slug" ]
270
279
280
+ assert issubclass (ItemModelSchema , BaseModel )
281
+ assert ItemModelSchema .Meta .primary_key_optional is False
282
+
271
283
i = ItemModelSchema (id = 1 , slug = "slug" , field1 = "1" , field2 = "2" )
284
+
272
285
assert i ._pydantic_config == "config"
286
+ assert i ._omissible_serialize == "serializer_func"
287
+ assert i .model_dump_json () == '{"field1":"1","id":1,"field2":"2","slug":"slug"}'
273
288
assert i .model_json_schema () == {
274
289
"properties" : {
275
290
"field1" : {
276
291
"title" : "Field1" ,
277
292
"type" : "string" ,
278
293
},
279
294
"id" : {
280
- "anyOf" : [
281
- {
282
- "type" : "integer" ,
283
- },
284
- {
285
- "type" : "null" ,
286
- },
287
- ],
288
- "default" : None ,
289
- "title" : "ID" ,
295
+ "type" : "integer" ,
296
+ "title" : "Id" ,
290
297
},
291
298
"field2" : {
292
299
"title" : "Field2" ,
@@ -299,6 +306,7 @@ class Meta(ResourceModelSchema.Meta):
299
306
},
300
307
"required" : [
301
308
"field1" ,
309
+ "id" ,
302
310
"field2" ,
303
311
"slug" ,
304
312
],
0 commit comments