2016-04-17 6 views
0

私は、ユーザーが興味深いURL(リンク)を投稿し、それらの下に公的にコメントすることができるredditのようなDjangoアプリを持っています。これを表現するために2つのデータ・モデルは、次のとおりです。最新のpublicreplyself.request.userによってない場合、私は第二に、少なくとも1以上のpublicreplyを持っているすべてのLinksを照会し、どうすればよい最新の日付に基づいて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)]) 

?私は次のような感覚を持っています:

Link.objects.filter(publicreply__isnull=False).exclude(**something here**) 

助けてください!パフォーマンスも重要なので、よりシンプルです。

答えて

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_replieslink.latest_replyを更新します。

クエリは次のようになります。

Link.objects.filter(number_of_replies__gte=1)\ 
      .exclude(latest_reply__user=request.user) 
関連する問題