我有以下内部消息应用程序模型:
class MessageThread(models.Model):
subject = models.CharField(max_length=256, blank=False)
class Message(models.Model):
thread = models.ForeignKey(MessageThread)
content = models.CharField(max_length=5000, blank=False)
timestamp = models.DateTimeField(auto_now_add=True, blank=False)
sender = models.ForeignKey(User)
class MessageRecipient(models.Model):
message = models.ForeignKey(Message)
thread = models.ForeignKey(MessageThread)
recipient = models.ForeignKey(User)
status = models.CharField(max_length=20, choices=MESSAGE_STATUS, default="unread")
对于给定用户,获取我正在执行的线程列表:
distinct_threads=MessageThread.objects.filter(messagerecipient__recipient=user)
.order_by('-message__timestamp').distinct()
如何删除 ORM 中包含状态“已删除”消息的所有线程? (换句话说,我想获取所有线程的列表,但不包含包含状态=“已删除”消息的线程。)
最佳答案
我为此在模型管理器中添加了一个方法:
def get_active_threads(self, user):
all_threads = MessageRecipient.objects.filter(recipient=user).order_by('-message__timestamp')
deleted_threads = []
final_threads = []
for thread in all_threads:
if thread.thread not in (deleted_threads or final_threads):
if thread.status == "deleted":
deleted_threads.append(thread.thread)
else:
final_threads.append(thread)
return final_threads
关于python - 消息系统的 Django ORM 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7948733/