允许Django Admin更改是否需要字段

时间:2018-07-20 13:09:52

标签: django python-3.x django-models configuration django-forms

我希望能够根据我要显示的是朋友还是客户来更改是否需要电子邮件字段,而不必每次都按git并重新部署。

我已经为Django中的其他设置设置了配置模型,该模型可以从管理员配置,但是很遗憾,我无法在其他模型或模型字段中使用任何这些设置,因为它会导致数据库迁移时出错。

这是我的代码(由于迁移问题而失败)

class UserForm(forms.ModelForm):
    stake = StakeField()
    email = forms.EmailField(required=getConfig(ConfigData.USER_EMAIL_REQUIRED))

    class Meta:
        model = User
        fields = '__all__'

是否有另一种方法可以在不会引起此问题的模型,模型表单或表单中设置必需/空白设置?

为清楚起见进行编辑:

我已经具有Configuration AdminModel,但是我正努力在面向用户的表单的ModelForm字段中使用此值(True / False)而不会导致数据库错误。

1 个答案:

答案 0 :(得分:1)

仅编辑formfield的required属性有什么问题?

class UserForm(forms.ModelForm):
    stake = StakeField()
    email = forms.EmailField(required=False)

    def clean_email(self, value):
        # In case your database schema does not allow an empty value, otherwise you can ignore this
        if not self.fields['email'].required and not value:
            # 'A friend' has used the form and the email field was not required
            value = 'whatever default/placeholder value you like'
        return value


class MyModelAdmin(admin.ModelAdmin):
    form = UserForm

    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        if not is_my_friend(request.user):
            form.fields['email'].required = True
        return form