問題があります。オブジェクトのメソッドを使用してオブジェクトを含むオブジェクトのリストをソート
オブジェクトの「日付」でソートされたさまざまな種類のオブジェクトのリストを生成しようとしています。各オブジェクトには、ソートする日付を返すメソッドgetDate
があります。
オブジェクトrecent_activity
オブジェクトは、このソートされたオブジェクトのリストを返す必要があります。
ただし、以下の行#items.append(self)
を参照してください。私は(getDate()
メソッドを使用して)日付順、異なる種類のオブジェクトの(スライス)のリストを返し、ラインitems.append(self)
、完全に書かれた作品のようにコードをコメントアウト
class UserProfile(models.Model):
...
def getDate(self):
return self.last_edited
...
def recent_activity(self):
followed = ...
sponsored = ...
...
items = []
#items.append(self) #<-- If this is in, the call to sorted doesn't work
for f in followed:
if (...):
items.append(f)
for s in sponsored:
if (...):
items.append(s)
for c in comments:
if (...):
items.append(c)
for u in updates:
if (...):
items.append(u)
for p in projects:
items.append(p)
#return items[0:7] #<-- If this is in, everything is fine!
items = sorted(items, key=lambda item: item.getDate(),reverse=True)
return items[0:7]
。
しかし、この行が含まれていると、コードは断続的に機能します。一部のオブジェクトでは(上のように)動作しますが、一部ではそうではありません(まったく実際には単にNoneを返します)。
sorted
を呼び出す前に配列を返すと、すべて正常に機能します。したがって、問題はsorted
への呼び出しに関連しています。
私が間違っていることを聞いて楽しみにしています!
(明らかに、誰かがこの質問の評価を下していますが、私には分かりませんが、それが不明だと思われる場合は、時間を割いて質問を改善してください)。
- 修正されました。解決策は、datetime.datetime
オブジェクトではなく、datetime.date
オブジェクトを返すコールをgetDate()
というときどき発生させていました。データベースの移行により、誤ったタイプのオブジェクトでフィールドの一部を手動で設定するためです。例外がないことを見て驚いたビットは、ただ静かに失敗する。
「None」を返すことがある場合は、何が間違っているのかを知るために人々が使用できる重要なコードを含めるのを忘れていると思います。現在のコードがどのように 'None'を返すのか分かりません。 – roam
まだ保存されていないUserProfileオブジェクトの場合、返されますか?また、後援、コメント、更新、プロジェクトがUserProfileオブジェクトのフィールドであると仮定すると、 'for f in self.followed:'、 'for s in self.sponsored:'、等であるべきです。 – Furbeenator
はわかりませんそれは助けますが、あなたは単に "items = sorted(items、key = UserProfile.getDate、reverse = True)"を実行できませんか? – Arthur