gpt4 book ai didi

python - 如何使用 Django Rest Framework 保存对象数组

转载 作者:行者123 更新时间:2023-12-01 02:30:29 25 4
gpt4 key购买 nike

我有这个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com