我有这个 json 代码:
{
"word" : "world",
"days" : ["tuesday", "thursday"]
}
DRF 给了我这个错误:
'days': [{'non_field_errors': ['Invalid data. Expected a dictionary, but got string.']},
这是我的日子序列化器:
class DaysSerializer(serializers.ModelSerializer):
class Meta:
model = Days
fields = ('day')
这是我的顶级序列化器:
class WordsSerializer(serializers.ModelSerializer):
days = DaysSerializer(many=True)
class Meta:
model = Words
fields = ('word', 'days')
Days 模型是:
class Days(models.Model):
DAYS = (
("sunday", "Sunday"),
("monday", "Monday"),
("tuesday", "Tuesday"),
("wednesday", "Wednesday"),
("thursday", "Thursday"),
("friday", "Friday"),
("saturday", "Saturday"))
day = models.TextField(choices=DAYS)
我想强调的是输入:
"days" : ["tuesday", "thursday"]
是 Days 表中的值而不是键。
我读到我需要使用批量 serializers 。这是今天推荐的路线吗?或者有更简单的方法吗?
如果我需要使用批量序列化器库,我从他们的示例中不明白如何使用该库来达到我的目的?即(批量)保存多对多条目(天)和其中一个记录(单词)。
附注
顺便说一下,days 和 Words 之间的关系是 M2M,没有 through
字段。只是简单的 M2M
附注(2)
我认为这应该起作用的方式是 DRF 将在 Days
表中查找,并尝试找到 day
列等于 tuesday
并制作一个M2M。
如果不存在,DRF 需要创建记录,然后进行 M2M。
周四同样如此。
最佳答案
如果我理解正确,您尝试将“天”作为主键列表传递,如果是这种情况,请尝试将序列化器更改为以下形式:
class WordsSerializer(serializers.ModelSerializer):
days=serializers.PrimaryKeyRelatedField(queryset=Days.objects.all(),many=True)
class Meta:
model = Words
fields = ('word', 'days')
您收到的错误是因为当您使用自己的模型序列化器序列化字段时,DRF 希望默认获取对象列表。您可以在DRF docs中阅读更多相关信息。 .
关于python - 如何使用 Django Rest Framework 保存对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879688/