【发布时间】:2018-10-21 19:58:45
【问题描述】:
我有模特
class myModel(models.Model):
name = models.CharField(max_length=100)
type = models.CharField(max_length=100)
nums = JSONField(null=True, blank=True)
我需要在nums 字段中保存数字。但是,具有相同type 的myModel 的两个实例不能具有相同的数字(nums 字段的交集应该为空)。
我已经尝试为它写一个信号
@receiver(pre_save, sender = myModel)
def check_duplicate_nums(sender, instance, **kwargs):
all_records = myModel.objects.filter(type = instance.type)
for record in all_records:
common_nums = list(set(record.nums).intersection(instance.nums))
if len(common_nums) != 0:
raise Exception("nums "+str(common_nums)+ " are repeated in " +str(record.name)+ " and "+instance.name)
但是这样做会打开 django admin 的调试窗口。我希望在那里显示错误。例如,当我们保存一个带有空字段的模型时,它会在红色突出显示的行中抛出“此字段是必需的”错误。我需要以这种方式显示错误。请提出一种方法。
谢谢!
【问题讨论】:
-
使用
form验证
标签: django django-models django-signals