如何解决Django admin中的自定义M2M验证未显示给用户 另一个想法
我有一个模型,需要验证m2m字段和常规字段是否互斥。 (即,您只能拥有一个,而不能只有一个。)
class EventFrequency(models.Model):
weekdays = models.CharField(...)
dates = models.ManyToManyField(...)
由于一个是m2m,所以无法覆盖模型save()
。 (保存模型,然后添加m2m)
我可以通过覆盖save_related()
在admin类中成功引发该错误,但是该错误不会显示在admin表单中。这只是常规服务器错误。
class EventFrequencyAdmin(VersionAdmin,admin.ModelAdmin):
model = EventFrequency
filter_horizontal = ('dates',)
def save_related(self,request,form,formsets,change):
super(EventFrequencyAdmin,self).save_related(request,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,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)
我在做什么错了?
解决方法
如何创建一个预保存信号并在其中放置验证逻辑,以便您可以通过这种方式引发验证错误?
https://docs.djangoproject.com/en/3.0/ref/signals/#pre-save
另一个想法
为管理员指定自定义ModelForm并覆盖该表单上的整洁效果如何?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。