所以我在我的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的ModelManager,所以不确定我做错了什么。
答案 0 :(得分:0)
尝试将方法定义更改为
def last(self, *args, **kwargs):
...