我正在使用Django和Django REST Framework为项目构建RESTful API。
我有一个名为Pet
的抽象模型类。我还创建了几个从该基类继承的子类。除此之外,我还有一个继承自House
的{{1}}模型,我正在使用models.Model
模块中的User
类。以下内容反映了我的django.auth
。
models.py
为了讨论起见,我们假设我的模型结构中的每个import models
from django.contrib.auth.models import User
class Pet(models.Model):
pass
class Dog(Pet):
has_tail = BooleanField()
name = CharField()
...
class Cat(Pet):
nails_trimmed = BooleanField()
name = CharField()
...
class House(models.Model):
pet = models.ForeignKey(Pet)
owner = models.ForeignKey(User)
room_quantity = models.IntegerField()
都会有一个House
。 (即不是可选的)
我想为每个经过身份验证的Pet
提供创建User
实例的功能。我想到的关键是我想让Pet创建成为一个隐含的过程。我希望用户能够创建一个House实例,并希望他们提供有关House
Pet
作为其请求的相关信息。我想以某种方式推断有关他们希望创建的Pet类型的信息,然后创建House
的相关子类的实例。我不知道如何实现这一点。
我想创建一个Pet
并添加"类型"字段,以推断要创建的PetSerializer(serializers.ModelSerializer)
的类型。但是,由于将为要创建/更新的每种Pet
提供不同的字段集,因此我不确定如何实现此Pet
类。
从某种意义上说,我基本上希望在PerSerializer
中有一个 union 类字段,并能够将其序列化/反序列化指向相关的{{ 1}}或HouseSerializer
。
我想过覆盖DogSerializer
的{{1}}方法,以检查并验证特定于每个子类的属性。他们,我也可以覆盖CatSerializer
和validate
方法,以便创建/更新相关模型类的实例。但是,这需要我以明确的方式验证相关字段的存在。换句话说,我必须明确检查PetSerializer
方法中每个继承类的每个属性是否存在。
这种做法并不像干嘛那样做。属性/字段已经存在于模型类中,并且必须在create
类中显式验证从update
继承的每个类的属性,这可能不是实现此功能的最佳方法。 / p>
我想知道是否有更好的Django / DRF方式来实现此功能。我想为从validate
继承的每个类编写ModelSerializer类,但我不知道如何将序列化/反序列化逻辑从Pet
类传递给PetSerializer
}或Pet
。关于如何设计/实现这个的任何建议?