我有一个名为Run的模型,其中有一个名为RunManager的管理器和一个自定义save()方法,如下所示
class RunManager(models.Manager):
use_for_related_fields = True
def get_queryset(self):
queryset = super(RunManager, self).get_queryset()
queryset = queryset.filter(archived=False)
return queryset
def unfiltered_runs(self):
queryset = super(RunManager, self).get_queryset()
return queryset
class Run(models.Model):
name = models.CharField(max_length=256)
archived = models.BooleanField(default=False)
objects = RunManager()
def save(self, *args, **kwargs):
# some business logic
super(Run, self).save(*args, **kwargs)
def archive(self):
# Some business logic
self.archived = True
self.save()
def recover_archived(self):
# Some business logic
self.archived = False
self.save()
这是一个旧代码,其中run.objects在多个位置使用,因此为了隐藏存档的运行,我使用RunManager。 一切正常,但现在我们想取消运行的存档。因此,我添加了unfilted_runs()方法,该方法显示所有运行的列表以及存档的运行。但是当我运行recove\u archived()方法时,我得到以下错误
IntegrityError: UNIQUE constraint failed: run.id
我知道这个错误是因为db将其视为具有相同id的新条目。 我知道我可以完全重写save方法,但我想避免这种情况
那么,有没有什么方法可以在未筛选的\u runs()查询集中而不是在常规查询集中进行save方法查找呢
按照@ivissani的建议,我修改了我的recover\u归档方法如下。它工作得非常完美
相关问题 更多 >
编程相关推荐