如何使用Django Rest Fram保存对象数组

2024-09-30 00:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下json代码:

{
  "word" : "world",
  "days" : ["tuesday", "thursday"]
}

DRF给我的错误是:

^{pr2}$

这是我的日子序列化程序:

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')

天数模型是:

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。这是今天推荐的路线吗?或者有更简单的方法?在

如果我需要使用批量序列化程序库,我无法从他们的示例中理解如何使用该库来实现我的目的?即(批量)保存多对多条目(日)与其中一条记录(字)。在

p.S

顺便说一下,天和单词之间的关系是没有through字段的M2M。普通的M2M

附言(2)

我认为这应该起作用的方式是DRF将在Days表中查找day列等于tuesday的日期并生成M2M

如果没有,DRF需要创建记录,然后生成M2M

thursday也一样。在


Tags: 程序序列化daysmetadrfclasswordm2m
2条回答

如果我正确理解您试图将“days”作为主键列表传递,如果这种情况下尝试将序列化程序更改为以下形式:

class WordsSerializer(serializers.ModelSerializer):
days=serializers.PrimaryKeyRelatedField(queryset=Days.objects.all(),many=True)
class Meta:
      model = Words
      fields = ('word', 'days')

您收到的错误是因为当您使用自己的模型序列化程序序列化字段时,DRF希望在默认情况下获取对象列表。您可以在DRF docs中阅读更多有关它的信息。在

在DRF序列化程序中有多种表示关系字段的方法。对于您的具体情况,SlugRelatedField更适合。在

class WordsSerializer(serializers.ModelSerializer):
    days = serializers.SlugRelatedField(many=True, slug_field='day`)

    class Meta:
        model = Words
        fields = ('word', 'days')

但请记住

When using SlugRelatedField as a read-write field, you will normally want to ensure that the slug field corresponds to a model field with unique=True.

相关问题 更多 >

    热门问题