Django admin中的自定义M2M验证未显示给用户

2024-09-30 08:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型,我需要验证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, 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)

我做错了什么


Tags: 模型selfformurladminmodelsrequestsave

热门问题