【发布时间】:2023-03-10 17:15:02
【问题描述】:
在将变量 foo 添加为 m2m 之前,我正在尝试验证变量 foo 对于 MyModel 和 Item 是否相同。如果不是,我想在管理员中引发 ValidationError。
models.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 的相同值。任何建议表示赞赏。
【问题讨论】:
标签: python django django-admin django-signals django-validation