我需要检查是否已经创建了其他模型,填写了一个字段.如果另一个模型具有任何值的字段,则不应发生尝试创建的当前模型.如果可能,请发送错误消息.
这是我目前的代码:
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
Run Code Online (Sandbox Code Playgroud)
我做错了什么或者我错过了什么?这样做的正确方法是什么?
首先,你不需要使用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)
Run Code Online (Sandbox Code Playgroud)