Django创建后中间模型
我使用的是DRM v3.9.4,具有以下型号:Django创建后中间模型,django,django-rest-framework,Django,Django Rest Framework,我使用的是DRM v3.9.4,具有以下型号: class Book(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) ... users = models.ManyToManyField("User", related_name="books", through="BookUser") class BookUser(models.Model):
class Book(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
users = models.ManyToManyField("User", related_name="books", through="BookUser")
class BookUser(models.Model):
user = models.ForeignKey("User", on_delete=models.CASCADE)
book = models.ForeignKey("Book", on_delete=models.CASCADE)
permission = models.CharField(...)
class User(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
使用以下序列化程序:
class UserSerializer(ModelSerializer):
class Meta:
model = User
fields = ( "id", ... )
class BookUserSerializer(ModelSerializer):
class Meta:
model = BookUser
fields = ('user', 'permission')
class BookSerializer(ModelSerializer):
users = BookUserSerializer(source='bookuser_set', many=True)
class Meta:
model = Book
fields = ( "id", "users", ... )
extra_kwargs = {
"users": {"allow_empty": True},
}
读书时,一切都很好:
{
id: ...,
users: [
{
user: 'some-uuid',
permission: 'read-only'
},
...
]
}
但当尝试使用相同的有效负载进行POST时:
{
id: ...,
users: [
{
user: 'some-uuid',
permission: 'read-only'
},
...
]
}
我得到一个错误:
KeyError: 'users'
查看api指南()
似乎默认情况下嵌套序列化程序是只读的,
但我不能让它工作
顺便说一句,重要的是:所有用户都已经(并且应该)存在,所以我希望这次POST调用在中间BookUser
表中添加一条记录,当然也包括Book
本身,但不是实际添加新的用户记录
任何帮助、指导或帮助都将不胜感激,因为如何使用
drf writable nested
软件包使这件事正常运行,您可以实现:
from drf_writable_nested import WritableNestedModelSerializer
class BookSerializer(WritableNestedModelSerializer):
users = BookUserSerializer(source='bookuser_set', many=True)
class Meta:
model = Book
fields = ( "id", "users", ... )
extra_kwargs = {
"users": {"allow_empty": True},
}