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

标签 python django django-rest-framework

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

相关文章:

python - Python 中的实验设计 (DoE)?

python - 如何覆盖夹层评论表单?

python - 如何在 Django 单元测试中测试 Django session ?

python - 基于 Django Rest Framework 中权限的不同查询集

Python 二维数组无法工作。帮忙~

python - 如何更改 Visual Studio 代码中的终端以使用非 Rosetta 终端,即让它使用 arm64 终端?

django-rest-framework - Django Rest Framework Nested Serializer required=False 错误

django - 将实例添加到 django rest 框架中的 manytomany 字段

Python 变量和函数注释引发 AttributeError

json - 如何将 Django 查询集输出为 JSON?