我有一个这样的模型:
class News(models.Model):
is_activity = models.BooleanField(default=False)
activity_name = models.CharField(max_length=240, blank=True, null=True)
我想要实现的是,如果
is_activity
已入住 我要 activity_name
被要求。因此,我试图覆盖 __init__
方法:class NewsForm(forms.ModelForm):
class Meta:
model = News
def __init__(self, *args, **kwargs):
super(NewsForm, self).__init__(*args, **kwargs)
if self.fields['is_activity'] is True:
self.fields['activity_name'].required = True
class NewsAdmin(FrontendEditableAdminMixin, admin.ModelAdmin):
form = NewsForm
即使我 checkin
is_activity
activity_name
是非必需的。怎么了?
最佳答案
ModelForm.clean()
方法使您可以访问清理过的数据——您可以在此处包含特定于字段的条件逻辑:
from django.core.validators import EMPTY_VALUES
class NewsForm(forms.ModelForm):
class Meta:
model = News
def clean(self):
is_activity = self.cleaned_data.get('is_activity', False)
if is_activity:
# validate the activity name
activity_name = self.cleaned_data.get('activity_name', None)
if activity_name in EMPTY_VALUES:
self._errors['activity_name'] = self.error_class([
'Activity message required here'])
return self.cleaned_data
class NewsAdmin(FrontendEditableAdminMixin, admin.ModelAdmin):
form = NewsForm
关于django - 如果在 Django 表单中选中另一个字段,则将字段设为必需,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816186/