gpt4 book ai didi

python - django rest 框架序列化程序和 django 表单

转载 作者:太空狗 更新时间:2023-10-29 20:15:41 25 4
gpt4 key购买 nike

问题:如何在表单和序列化程序中编写用于字段验证的 DRY 代码?

示例:我有一个带有模型形式的简单 Django 应用程序,它验证 Orderpassengers 字段:

def clean_passengers(self):
passengers = self.cleaned_data['passengers']
if passengers > self.flight.available_seats:
raise forms.ValidationError(
_(u'''Passengers count can`t be greater then seats count'''))
return passengers

Order 序列化器中进行验证的相同代码:

def validate_passengers(self, attrs, source):
passengers = attrs[source]
if passengers > self.flight.available_seats:
raise serializers.ValidationError(
_(u'''Passengers count can`t be greater then seats count'''))
return attrs

这不是 DRY,我已经写了两次相同的逻辑。我怎样才能避免这种情况?也许我可以从表单或类似的东西继承序列化程序。

最佳答案

您可以使用序列化器反序列化和验证表单的 is_valid 方法中的数据。

class MyModelForm(ModelForm):
def is_valid(self):
# Call super's is_valid to populate cleaned_data and do basic field validation
valid = super(MyModelForm, self).is_valid()
if not valid:
return False

serializer = MyModelSerializer(data=self.cleaned_data)
return serializer.is_valid()

关于python - django rest 框架序列化程序和 django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24047308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com