在django rest框架中一次性创建新资源及其关系

在django rest框架中一次性创建新资源及其关系,django,django-rest-framework,Django,Django Rest Framework,我试图在一篇文章中创建一个对象及其与多个对象的关系,但我一直得到400个“属性”:“此字段是必需的”,如何在一篇文章中创建此关系的两侧 我现在得到的是: class Attribute(models.Model): name = models.CharField(max_length=100) class Value(models.Model): name = models.CharField(max_length=100) attribute = models.Fo

我试图在一篇文章中创建一个对象及其与多个对象的关系,但我一直得到400个
“属性”:“此字段是必需的”
,如何在一篇文章中创建此关系的两侧

我现在得到的是:

class Attribute(models.Model):
    name = models.CharField(max_length=100)


class Value(models.Model):
    name = models.CharField(max_length=100)
    attribute = models.ForiegnKey(Attribute, related_name="allowed_values")
相当标准的一对多关系和相关名称。我的序列化程序看起来像

class ValueSerializer(serializers.ModelSerializer):
    class Meta:
         model = Value


class AttributeSerializer(serializers.ModelSerializer):
    class Meta:
         model = Attribute

    allowed_values = ValueSerializer(many=True)
我的数据是:

{'name': 'new attribute',
 'allowed_values': [{'name': 'value1'}, {'name':'value2'}, {'name':'value3'}]}

在阅读源代码时,我看到一些东西似乎应该在保存attributes对象之前从相关的值字段中弹出,但我似乎无法让序列化程序这样调用。

DRF默认情况下应为
属性
字段,因为您没有显式定义字段名

定义所有字段,如下所示:

class ValueSerializer(serializers.ModelSerializer):
    class Meta:
        model = Value
        fields = ('name',)

class AttributeSerializer(serializers.ModelSerializer):
    allowed_values = ValueSerializer(many=True)

    class Meta:
        model = Attribute
        fields = ('name', 'allowed_values',)
明确定义字段名是一种良好的做法。它可以防止以后添加任何其他模型字段时出现任何潜在问题