我希望能够根据我要显示的是朋友还是客户来更改是否需要电子邮件字段,而不必每次都按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)而不会导致数据库错误。
答案 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