【发布时间】:2021-02-19 12:58:44
【问题描述】:
我有一个包含多对多和外键关系的表
class TableRelation(models.Model):
table1 = models.ForeignKey(table1, on_delete=models.CASCADE)
table2 = models.ForeignKey(table2, on_delete=models.CASCADE)
table3 = models.ManyToManyField(table3)
iam 使用 mixins 和通用视图集来列出和更新。列表检索工作正常。但是当我更新或创建它时显示
AssertionError:.create() 方法默认不支持可写嵌套字段。
为序列化器table1.serializers.TableRelationSerializer 编写显式.create() 方法,或在嵌套的序列化器字段上设置read_only=True。
所以我在序列化器中写了一个创建方法
class TableRelationSerializer(serializers.ModelSerializer):
table1 = Table1Serializer()
table2 = Table2Serializer()
table3 = Table3Serializer(many=True)
class Meta:
model = TableRelation
fields = ('id', 'table1', 'table2', 'table3',)
def create(self, instance, validated_data):
remove_table1 = validated_data.pop('table1',)
remove_table2 = remove_table1.pop('table2')
table_data = remove_table2.pop('table3')
table1 = Table1.objects.create(**validated_data)
table2 = Table2.objects.create(**validated_data)
table3 = Table3.objects.create(**validated_data)
TableRelation.objects.create(
table1=table1, table2=table2, table3=table3, **table_data)
return "fhfh"
然后我得到这个错误 类型错误:create() 缺少 1 个必需的位置参数:'validated_data' 我尝试了其他一些方法然后我也收到了这个错误 在包含表的多对多和外键列中创建实例的正确方法是什么?
【问题讨论】:
-
尝试从 create 方法中删除实例并返回 {} 而不是字符串
-
删除实例后,错误消失了。谢谢。我写创建方法的方式是写?因为无法创建
标签: django django-rest-framework many-to-many django-serializer