我有一个类似reddit的Django应用程序,用户可以在其中发布有趣的网址(链接),然后在其下公开评论。表示这一点的两个数据模型是:
class Link(models.Model):
description = models.TextField(validators=[MaxLengthValidator(500)])
submitter = models.ForeignKey(User)
submitted_on = models.DateTimeField(auto_now_add=True)
class Publicreply(models.Model):
submitted_by = models.ForeignKey(User)
answer_to = models.ForeignKey(Link)
submitted_on = models.DateTimeField(auto_now_add=True)
description = models.TextField(validators=[MaxLengthValidator(250)])
如何查询至少有一个或多个Links
的所有publicreply
,其次是publicreply
不的self.request.user
}}?我感觉如下:
Link.objects.filter(publicreply__isnull=False).exclude(**something here**)
请指教!性能也是关键,因此越简单越好!
答案 0 :(得分:1)
为了提高性能和简洁性,您可以缓存回复数量和最新回复:
class Link(models.Model):
...
number_of_replies = models.PositiveIntegerField(default=0)
latest_reply = models.ForeignKey('myapp.Publicreply', related_name='+', blank=True, null=True, on_delete=models.SET_NULL)
输入回复后,请更新相应的link.number_of_replies
和link.latest_reply
。
然后查询将是:
Link.objects.filter(number_of_replies__gte=1)\
.exclude(latest_reply__user=request.user)