【发布时间】:2020-12-01 15:19:25
【问题描述】:
我有一个模型,我需要验证 m2m 字段和常规字段是否互斥。 (即你只能拥有一个或另一个,而不是两者。)
class EventFrequency(models.Model):
weekdays = models.CharField(...)
dates = models.ManyToManyField(...)
由于一个是 m2m,覆盖模型 save() 不起作用。 (模型保存,然后添加m2m)
我能够通过覆盖save_related() 在管理类中成功抛出错误,但它不会显示在管理表单中。这只是一个常规的服务器错误。
class EventFrequencyAdmin(VersionAdmin, admin.ModelAdmin):
model = EventFrequency
filter_horizontal = ('dates',)
def save_related(self, request, form, formsets, change):
super(EventFrequencyAdmin, self).save_related(request, form, formsets, change)
if form.instance.dates.exists() and form.instance.weekdays:
raise ValidationError('Cannot select both dates and weekdays.')
我可以通过覆盖changeform_view() 来捕获错误并尝试将其显示给用户。除了重定向之外,它似乎运行良好。 form_url 没有价值,因此是 ''。
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
try:
return super(EventFrequencyAdmin, self).changeform_view(request, object_id, form_url, extra_context)
except ValidationError as e:
print('************* caught error *************')
self.message_user(request, e, level=messages.ERROR)
return HttpResponseRedirect(form_url)
我做错了什么?
【问题讨论】:
标签: python python-3.x django