因此,我在Django应用程序中有一些重复的逻辑,我希望将其重构到模型层中,特别是在last()方法中:
我基本上想重写last,使其类似于filter,这样我就可以运行如下查询:
Record.objects.last(build_id=1, name="test")
如果存在多个记录,让它返回最后一个记录
所以这就像把最后一个和过滤成一个。
class RecordManager(models.Manager):
def last(self, *args, **kwargs):
''' returns last record, logs multiple instances if more than one
record exists '''
try:
record_queryset = self.filter(*args, **kwargs)
record_count = record_queryset.count()
if record_count > 1:
logger.debug("{} duplicates for record: {} found for this job. id's: {}".format(record_count, name, record_queryset))
return record_queryset().order_by('-id')[0]
except IndexError:
return None
如果我运行record.objects.filter(name=“jim”)
我按预期恢复了2个记录
如果我查询record.objects.last(name=“jim”)
我希望得到与filter()相同的结果,但是我得到了60条返回的记录,这与
record.objects.all()。
为什么last()不过滤我的查询集?
我从来没有和Django的模特经理搞过交道,所以不知道我做错了什么。