如何在django和djangorestframework中对创建API进行自定义验证?
这是我的问题,我正在创建地址模型,在那个城市,地区,我接受空值,因为对于一些API视图,我将接受空值,但另一个API,我将调用相同的模型,当我想验证该字段是必需的时,它是如何可能的下面是我的代码示例如何在django和djangorestframework中对创建API进行自定义验证?,django,django-rest-framework,Django,Django Rest Framework,这是我的问题,我正在创建地址模型,在那个城市,地区,我接受空值,因为对于一些API视图,我将接受空值,但另一个API,我将调用相同的模型,当我想验证该字段是必需的时,它是如何可能的下面是我的代码示例 models.py class Address(models.Model): address_line1 = models.CharField(max_length=250) address_line2 = models.CharField(max_length=250, blank
models.py
class Address(models.Model):
address_line1 = models.CharField(max_length=250)
address_line2 = models.CharField(max_length=250, blank=True, null=True)
city = models.ForeignKey('Cities', on_delete=models.DO_NOTHING, blank=True, null=True)
district = models.ForeignKey('Districts', on_delete=models.DO_NOTHING, blank=True, null=True)
class Assignaddress(models.Model):
address = models.ForeignKey(Address, on_delete=models.CASCADE)
owner_name = models.CharField(max_length=255)
class dont`Assignaddress(models.Model):
address = models.ForeignKey(Address, on_delete=models.CASCADE)
owner_name = models.CharField(max_length=255)
现在在serializer.py中
class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields = ('address_line1','address_line2','city','district')
class AssignaddressSerializer(serializers.ModelSerializer):
class Meta:
model = Assignaddress
fields = ('address ','owner_name ')
class dont`AssignaddressSerializer(serializers.ModelSerializer):
class Meta:
model = dont`Assignaddress
fields = ('address ','owner_name ')
现在,我如何验证您必须通过的城市和地区地址是必需的,而不必指定地址
很抱歉没有写入views.py,所以在您的序列化程序中,您想接受空值吗?您可以使用
allow_null
和/或required
(对于反序列化期间不应提供的字段)执行此操作。请务必检查相应的Django Rest框架
示例(内存不足-查看Django Rest框架文档了解特定用例):
我的解决方案是您想要的还是我误解了您的问题?谢谢您的更新,我只是想知道如何从外键关系中设置city and district字段为required=True,或者有任何示例代码供我参考understand@Gowtham但我不确定我是否正确理解了您的意思——我编辑了我的答案,并为您提供了一个允许空值的PrimaryKeyRelatedField示例传递给序列化程序。
class AssignaddressSerializer(serializers.ModelSerializer):
address = serializers.PrimaryKeyRelatedField(many=False, allow_null=True)
class Meta:
model = Assignaddress
fields = ('address ','owner_name ')