我有一个具有多对多关系(NotificationGroups)的模型(通知)。序列化来自模型的数据与 DRF 配合得很好,但是当我想保存到引用多对多关系的通知时,我什么也得不到。
型号:
class Notifications(models.Model):
notification = models.CharField(max_length='125')
groups = models.ManyToManyField('NotificationGroups')
class NotificationGroups(models.Model):
name = models.CharField(max_length='100')
序列化器:
class NotificationGroupSerializer(serializers.ModelSerializer):
class Meta:
model = NotificationGroups
fields = ('id', 'name',)
class NotificationSerializer(serializers.ModelSerializer):
groups = NotificationGroupSerializer(many=True, read_only=True)
class Meta:
model = Notifications
fields = ('id', 'notification', 'groups',)
请求的 JSON 正文:
{
"notification":"This is a test from the API",
"groups":[
{
"id":1
},
{
"id":3
}
]
}
View 集:
def create(self, request):
serializer = NotificationSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
print serializer.validated_data
return Response(serializer.data, status=status.HTTP_201_CREATED)
当我保存时,没有为通知组保存任何内容。我现在正在 ViewSet 中打印经过验证的数据只是为了测试,但我没有获得任何组数据。
我意识到我在这里遗漏了一些明显的东西,但我无法找到我的问题。我能找到的所有示例都讨论将多对多数据写入新数据,而不是根据我需要在这里引用它。
编辑并修复:
序列化器:
class NotificationGroupSerializer(serializers.ModelSerializer):
class Meta:
model = NotificationGroups
fields = ('id', 'name',)
class NotificationSerializer(serializers.ModelSerializer):
class Meta:
model = Notifications
fields = ('id', 'notification', 'groups',)
请求的 JSON 正文:
{
"notification":"This is a test from the API",
"groups":[1, 3]
}
最佳答案
您需要更改序列化器中的create
和update
函数。默认情况下,DRF 不支持可写嵌套序列化器。
http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations
关于Django Rest Framework 不保存对多对多的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39391423/