问题: 如何编写DRY代码,以在表单和序列化器中进行字段验证?
示例:
我有一个简单的Django应用程序,其中模型表单验证Order
的passengers
字段:
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的,我需要写两次相同的逻辑。我该如何避免这种情况?也许我可以从表单中继承序列化器或类似的东西。
for error, value in serializer.errors.iteritems(): self._errors[error] = value
- zymud_errors
,你可以使用add_error(field, error)
方法。 - nnutter