【发布时间】:2016-05-13 18:20:51
【问题描述】:
我想先按 NoteReposter 模型(中介)的 date_added (DateTime) 对笔记对象进行排序,如果它为空,则对其进行排序由 Note 模型本身的 date_created (DateTime)。
这是我迄今为止在我的观点中所做的。py
user = NotepikUser.objects.get(pk=1)
# Combie the notes reposted and notes created of user
notes = Note.objects.filter(Q(notereposter__user=user) | Q(author=user))
notes = notes.order_by("-notereposter__date_added", "-date_created")
在我的 models.py 中
笔记模型
class Note(models.Model):
note = models.CharField(max_length=2100)
date_modified = models.DateTimeField(auto_now=True, blank=True)
# If the notereposter__date_added is null then sort it using this datetime field
date_created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey('NotepikUser',
related_name="%(class)ss_created")
reposters = models.ManyToManyField('NotepikUser', through="NoteReposter",
related_name="%(class)ss_reposted", blank=True)
categories = models.ManyToManyField('Category', blank=True,
related_name='notes')
NoteReposter 模型(中介)
class NoteReposter(models.Model):
note = models.ForeignKey("Note", on_delete=models.CASCADE)
user = models.ForeignKey("NotepikUser", on_delete=models.CASCADE)
date_modified = models.DateTimeField(auto_now=True, blank=True)
# Sort by this datetime field first
date_added = models.DateTimeField(auto_now_add=True)
很遗憾,我的解决方案没有正确排序
谢谢!
编辑
someone created note1 (Note)
note1 date_created is 2016 January 1, 5:00 PM
User2 created note2
note2 date_created is 2016 January 1, 5:30 PM
User2 reposted note1 (note of someone)
notereposter1 (NoteReposter instance) created with user = User2,
note=note1, date_added = 2016 January 1, 6:00 PM
User2 created note3
note3 date_created is 2016 January 1, 6:30 PM
我想要这样排序的笔记
<note3> 6:30 PM,
<notereposter1.note> 6:00pm
<note2> 5:30pm
【问题讨论】:
-
不相关:为什么将相关模型作为字符串传递?例如
...ManyToManyField('NotepikUser'...而不是...ManyToManyField(NotepikUser,...?有用吗? -
你的解决方案有什么问题?
-
I want to sort the notes objects by date_added (DateTime) of NoteReposter model (intermediary)。这有什么意义吗?这是一个多对多关系:每个笔记有多个用户,即每个笔记有多个 NoteReposter 条目。您想如何使用它们对笔记进行排序?例如按最新的 NoteReposter 对笔记进行排序? -
@Pynchia 是的,它正在工作。我将它作为字符串传递,因为尚未定义 NotepikUser 模型。 [stackoverflow.com/questions/18303406/… -Raz 排序不对
-
您没有在 NoteReposter 中为 Note FK 指定相关名称。应该是
note_reposters。而你的查询应该是notes.order_by("-note_reposters__date_added", "-date_created")。
标签: python mysql django django-models