장고를 사용하여 메시징 응용 프로그램을 작성하려고합니다. postman
을 사용하지 않는 이유는 사용자가 아닌 다른 개체간에 메시징이 필요하며 대부분 우편 배달부 기능이 필요하지 않기 때문입니다. 여기 관련 개체에 따른 개체 찾기
class Recipient(models.Model):
...
def get_unread_threads():
see below...
class Thread(models.Model):
author = models.ForeignKey(Recipient, related_name='initiated_threads')
recipients = models.ManyToManyField(
Tribe,
related_name='received_thread',
through='ThreadReading')
subject = models.CharField(max_length=64)
class Meta:
app_label = 'game'
class Message(models.Model):
author = models.ForeignKey(Recipient, related_name='sent_messages')
date_add = models.DateTimeField(auto_now_add=True)
date_edit = models.DateTimeField(blank=True)
content = models.TextField(max_length=65535)
thread = models.ForeignKey(Thread)
class Meta:
get_latest_by = 'date'
class ThreadReading(models.Model):
thread = models.ForeignKey(Thread)
recipient = models.ForeignKey(Recipient)
date_last_reading = models.DateTimeField(auto_now=True)
내 문제에 대한 get_unread_threads
입니다. 나는 그걸하는 법을 정말로 알 수 없다. 첫 시도입니다 :
def get_unread_threads(self):
"""
return a queryset corresponding to the threads
which at least one message is unread by the recipient
"""
try:
query = self.received_thread.filter(
message__latest__date_add__gt=\
self.threadreading_set.get(thread_id=F('id')).date_last_reading)
except ObjectDoesNotExist:
query = None
return query
그러나 조회가 방법 latest
을 따라갈 수 없기 때문에 분명히 작동하지 않습니다. 여기
필자는 피할 수있는 정보 중복을 추가 할 수는 있습니다. – Vincent