【发布时间】:2019-10-07 21:50:32
【问题描述】:
在我的 DRF 项目中,我有一个模型:
class Item(BaseModel):
PRIVATE = 'PRIVATE'
COMPANY = 'COMPANY'
ACCOUNT_TYPES = (
(PRIVATE, _('Private')),
(COMPANY, _('Company')),
)
company_name = models.CharField(max_length=128, null=True, blank=True)
person_name = models.CharField(max_length=128, null=True, blank=True)
account_type = models.CharField(max_length=32, choices=ACCOUNT_TYPES)
phone = models.CharField(max_length=128, null=True, blank=True)
email = models.EmailField(max_length=128, null=True, blank=True)
和序列化器中的 ItemSerializer,如:
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('account_type', 'company_name', 'person_name')
def create(self, validated_data):
print('ItemSerializer, create')
print('validated_data:', validated_data)
return super().create(validated_data)
def validate(self, attrs):
print('ItemSerializer validate, attrs:', attrs)
return attrs
在模型中可以看到,有company_name和person_name这两个字段,模型中都不需要。
要创建项目,必须指定account_type。它可以是PRIVATE 或COMPANY。
现在,如果帐户类型是公司或私人,我想在我的序列化程序中指定特定字段。例如,account_type 是 COMPANY,我想将字段 company_name 设为必填。如果 account_type 是 PRIVATE 我想让person_name 是必需的。
- 哪种方法适合实现这一目标,我该如何做到这一点?
- 同样使用上述逻辑,我想在现场做额外的验证。示例:是
account_type是PRIVATE并且person_name 不为空,我想对person_name进行一些验证(检查它是否具有正确的格式、长度等)
【问题讨论】:
标签: python django django-models django-rest-framework