小编zym*_*mud的帖子

django rest框架序列化器和django表单

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

示例:我有简单的django应用程序与模型形式,它验证passengers字段为Order:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这不是干的,我写了两次相同的逻辑.我怎么能避免这个?也许我可以从表单或类似的东西继承序列化程序.

python django django-rest-framework

9
推荐指数
2
解决办法
3738
查看次数

模型Mixin中的Django GenericRelation

我有mixin和型号:

class Mixin(object):
    field = GenericRelation('ModelWithGR')

class MyModel(Mixin, models.Model):
   ...
Run Code Online (Sandbox Code Playgroud)

但是django不会把GenericRelation场变成GenericRelatedObjectManager:

>>> m = MyModel()
>>> m.field
<django.contrib.contenttypes.fields.GenericRelation>
Run Code Online (Sandbox Code Playgroud)

当我将字段放入模型本身或抽象模型时 - 它工作正常:

class MyModel(Mixin, models.Model):
   field = GenericRelation('ModelWithGR')

>>> m = MyModel()
>>> m.field
<django.contrib.contenttypes.fields.GenericRelatedObjectManager at 0x3bf47d0>
Run Code Online (Sandbox Code Playgroud)

我怎样才能GenericRelation在mixin中使用?

django generic-relations

7
推荐指数
1
解决办法
633
查看次数