我有Topiccenter模型:
class TopicCenter(models.Model):
title = models.TextField()
def latest_entry(self):
latest_entries = []
book = self.tc_books.order_by('-id')[:1]
journal = self.tc_journals.order_by('-id')[:1]
if book:
for b in book:
if b:
latest_entries.append(b)
if journal:
for jn in journal:
if jn:
latest_entries.append(jn)
lastone = []
if latest_entry:
lastone = max(latest_entries, key = lambda x: x.added)
return lastone
# what to return here if lastone is empty list ?? :(
每个主题中心都可以有很多书籍和期刊。我想通过其added
字段获取最新条目。
我现在正在按其最新条目的日期对主题中心进行排序。现在我面临的问题是,一些话题中心完全是空的(没有书,没有期刊),所以如果latest_entry()
是latest_entry
,我不知道在[]
方法中要返回什么,以便我可以像这样在这里使用它:
tcss = TopicCenter.objects.all().distinct('id')
sorter = lambda x: x.latest_entry().added
tcs = sorted(tcss, key=sorter, reverse=True)
此刻我收到'list' object has no attribute 'added'
,因为一个Topiccenter既没有书也没有日记,因此latest_entry()
正在返回[]
,导致出现错误消息。
有人可以帮助我如何解决这个逻辑:(
答案 0 :(得分:1)
我假设你在其他地方也使用latest_entry()
,所以只需创建另一个方法latest_added_time()
,它返回latest_entry.added
或假的时间。
class TopicCenter(models.Model):
...
def latest_added_time(self):
latest = self.latest_entry()
if latest:
return latest.added
else:
# returns a time to place it at the end of the sorted list
return datetime(1, 1, 1)
然后,您可以对这种新方法进行排序:
tcss = TopicCenter.objects.all().distinct('id')
sorter = lambda x: x.latest_added_time()
tcs = sorted(tcss, key=sorter, reverse=True)
如果您没有使用latest_entry()
进行其他任何操作,那么您应该将此逻辑直接放入该函数中。
答案 1 :(得分:0)
您可以尝试更改条件
if not book and not journal:
#Action you want to perform
或者您可以看到lastone
列表是否为空,您可以在其中附加任何消息,例如
if not len(lastone):
#Your code to append a message