DRF无法在嵌套模型序列化程序中具有required = False标志

时间:2018-05-31 19:18:26

标签: python django-rest-framework

我无法对此验证错误进行排序。

我的地址模型具有必填字段' locality'。

class Address(models.Model):
      ....
      locality = models.CharField(max_length=20,unique=True)
      ....

class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = ['house_number', 'street', 'area', 'locality', 'address_of']


class CustomerSerializer(serializers.ModelSerializer):
    ship_address = AddressSerializer(required=False)

    class Meta:
        model = Customer

在地址模型中,地点是必填字段。

我想让AddressSerializer在CustomerSerializer中是可选的。 尽管有所需的= False标志,但我收到了验证错误:

"ship_address": {
        "locality": [
            "This field may not be blank."
        ]
    }

**请注意:这只是一个代表性的,而不是我的模型和序列化器的完全复制品,因此忽略了任何小错误。

3 个答案:

答案 0 :(得分:0)

export const asynchronous = data => {
   return axios.get(url).then(res => {
     return res;
   });
}

并修改models.py 您想要选择

的字段中的class CustomerSerializer(serializers.ModelSerializer): ship_address = AddressSerializer(read_only=True)

答案 1 :(得分:0)

你需要一些特技。在viewsets中,您确定了有效负载和http方法。并使用不同的Serializer类处理它们。

答案 2 :(得分:0)

使用嵌套序列化程序时,您遇到的问题与您相同。最后,我想出了一个解决方案,该解决方案添加了read_only标志,它的工作原理很吸引人。我希望这能解决您的问题。

class Meta:
    model = ModelName
    fields = ('pk', 'field_1', 'field_2', 'field_3')
    extra_kwargs = {
        'field_1': {
            'required': False,
            'read_only': True,
        },
    }