我需要检查是否已经创建了其他模型,填写了一个字段。 如果另一个模型具有任何值的字段,则不应发生尝试创建的当前模型。如果可能,请发送错误消息。
这是我目前的代码:
class Video(models.Model):
#####
# Fields of model
#####
def save(self, force_insert=False, force_update=False, *args, **kwargs):
some_video = Video.objects.all().filter(field_boolean=True).first()
if not some_video:
# Save current model
super(Video, self).save(force_insert, force_update, *args, **kwargs)
else:
# avoid save method for the current model created and send error message
我做错了什么或我错过了什么?这样做的正确方法是什么?
答案 0 :(得分:5)
首先,您不需要同时使用all()
和filter()
。其次,使用exists()代替first()
。如果True
包含任何结果,则会返回QuerySet
,如果不包含,则返回False
。这会尝试以最简单,最快的方式执行查询。
class Video(models.Model):
name = models.CharField(max_length=30)
field_boolean = models.BooleanField()
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if Video.objects.filter(field_boolean=True).exists():
print('Video with field_boolean=True exists')
else:
super(Video, self).save(*args, **kwargs)