【问题标题】:Create a new resouce and its relations in one go in django rest framework在 django rest 框架中一次性创建一个新的资源及其关系
【发布时间】:2014-11-18 01:27:16
【问题描述】:

我试图在一个 POST 中创建一个对象及其对多关系,但我不断收到 400 'attribute': 'This field is required,我如何在一个 POST 中创建这种关系的双方?

我现在拥有的是:

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'}]}

在阅读源代码时,我看到一些看起来应该弹出相关值字段的内容,直到属性对象被保存后,但我似乎无法让序列化程序像这样调用。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    DRF 默认需要 attribute 字段,因为您没有明确定义字段名称。

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

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

    明确定义字段名称是一种很好的做法。它可以防止任何潜在的问题,以防之后添加任何其他模型字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-13
      • 2015-10-30
      • 2013-01-27
      • 1970-01-01
      • 2022-01-15
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多