需要模型字段

时间:2013-05-19 16:50:37

标签: django

我想在我的模型clean()方法中更改字段的“required”属性。

这是我的模特:

class SomeModel(models.Model):
    type = models.CharField()
    attr1 = models.ForeignKey(Attr1, blank=True, null=True)
    attrs2 = models.ForeignKey(Attr2, blank=True, null=True)

现在我通过在视图中添加一个新参数在我的ModelForm __init__中执行此操作。 它动态设置字段所需。

我的模特能否实现同样的目标?我正在使用django-rest-framework for API(它正在使用ModelForm),因此full_clean()(包括clean_fields()clean())将会运行。

如果type以某个字符串开头,我想要attr1 / attr2字段。

我知道我可以在Model.clean()进行此检查,但它会落入NON_FIELD_ERRORS

def clean(self):
    if self.type.startswith("somestring"):
        if self.attr1 is None and self.attr2 is None:
            raise ValidationError("attr1 and attr2 are required..")

我宁愿看到这些错误附加到attr1和attr2字段错误,只需要“此字段是必需的”(标准的“必需”django错误)。

1 个答案:

答案 0 :(得分:0)

这是一个适合我的代码示例:

def clean(self):
        is_current = self.cleaned_data.get('is_current',False)
        if not is_current:
            start_date = self.cleaned_data.get('start_date', False)
            end_date   = self.cleaned_data.get('end_date', False)
            if start_date and end_date and start_date >= end_date:
                self._errors['start_date'] = ValidationError(_('Start date should be before end date.')).messages
        else:
            self.cleaned_data['end_date']=None
        return self.cleaned_data