python - 在 django admin 中显示 m2m_changed 信号的验证错误

标签 python django django-admin django-signals django-validation

在将变量添加为 m2m 之前,我尝试验证 MyModel 和 Item 的变量 foo 是否相同。如果不是,我想在管理员中提出一个 ValidationError。

模型.py

class Item(models.Model):
    foo = models.CharField(max_length=200)    

class MyModel(models.Model):
    foo = models.CharField(max_length=200)
    items = models.ManyToManyField(Item)

信号.py

@receiver(m2m_changed, sender=MyModel.items.through)
def my_validator(sender, instance, action, pk_set, **kwargs):
    if action == 'pre_add':
        if Item.objects.filter(id__in=pk_set, foo=instance.foo).count() != len(pk_set):
            raise ValidationError({'items': ["Foo doesn't match"]})

有没有办法让 ValidationError 在管理员中正确显示,而不是显示为 500 错误。

我无法想出一个解决方案来使用 MyModel 的 clean 方法来验证 foo 的相同值。如有任何建议,我们将不胜感激。

最佳答案

使用clean方法创建一个form类,并修改您的管理类以使用该表单。阅读 this :

喜欢:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    search_fields = ('foo', 'items__foo')
    list_display = ('foo', 'items__foo')
    form = MyModelForm


class MyModelForm(forms.ModelForm):

    def clean(self):
        """
        This is the function that can be used to 
        validate your model data from admin
        """
        super(MyModelForm, self).clean()
        foo = self.cleaned_data.get('foo')
        pk_set = Item.objects.all().values_list("id")

        # The logic you were trying to filter..
        if Item.objects.filter(id__in=pk_set).count() != len(pk_set):
            raise ValidationError({'items': ["Foo doesn't match"]})

关于python - 在 django admin 中显示 m2m_changed 信号的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167275/

相关文章:

python - WordNetlemmatizer 错误 - 所有字母均已词形还原

python - 根据组聚合值在 MultiIndex Dataframe 上设置值

python - Django + Gunicorn + Nginx : Bad Request (400) in Debug=True

django - 在 django admin 中加入两个表以获取 display_list 的列

python - IPython + Pandas 中的 Matplotlib : ImportError Symbol not found: _png_create_info_struct

python - Django 模板反向 url 解析而不为变量创建组

django - 在 Django 中,是否可以从自定义标签内访问当前用户 session ?

django admin 不会将对象添加到 Manytomany 字段中

javascript - 如何覆盖 django 管理模板以添加自定义 javascript?

python - 为什么 pylint 告诉我我的 dict 属性是一个 undefined variable ?