2017-06-06 13 views
2

ありがとうございました。Djangoモデルに外部キーのデフォルト値を既存のレコードに適用

以前、私はこの質問How to Get Unread Posts for Usersを投稿しました。

問題は次のとおりです。この記事が既に別のユーザーによって読み取られているうちに、1人のユーザーが読んでいない記事を除外することはできません。

なぜ私はそれを行うことができないのかを理解しました。私はDjangoを使わずにデータベースに書き込んだデータを持っていますが、各投稿のデフォルトをFalseに設定しています。

次に、手動で1つの記事を管理者のユーザーに未読に設定すると、データベース内にこの特定の記事がこのユーザーによって読み取られていないというレコードが1つあります。

問題は、以下のようになります。

私はすべての既存のユーザーのためのデータベースを持っているすべての既存の記事の「未読」に設定するにはどうすればよいですか?

また、新しいユーザーが実際にそれを読んでいない限り、記事が未読のままになることはありますか?

あなたの便宜のため、ここにコードをコピーしました。

マイモデル:

class Posts(models.Model): 
title = models.CharField(max_length=255) 
content_url = models.URLField(unique=True) 
content = models.CharField(max_length=255) 
post_date = models.DateField(default="2999-12-12") 

class readstatus(models.Model): 
reading_status = models.BooleanField(default=False) 
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 
article = models.ForeignKey(Posts, on_delete=models.CASCADE) 
created = models.DateTimeField(auto_now_add=True) 

マイビュー:

class DailyReading(ListView): 

template_name = 'reading.html' 
context_object_name = "data" 
paginate_by = 20 
def get_queryset(self): 

    if self.kwargs['status'] == "read": 
     queryset = piaoyou.objects.filter(readstatus__reading_status=True,readstatus__user=self.request.user) 
     return queryset 
    else: 
     queryset= Posts.objects.filter(readstatus__reading_status=False,readstatus__user=self.request.user) 
     return queryset 

マイテンプレート:

{% for info in data %} 
       <quoteblock> 
        <ul> 
         <li><a href="{{ info.get_absolute_url }}">{{ info.title }} 
          <footnote></footnote> 
         </a>{{ info.post_date }}</li> 

         <footnote>{{ info.get_abstract_content }}</footnote> 
        </ul> 
       </quoteblock> 

     {% endfor %} 

答えて

0

OMG、私はちょうどこれを行う方法を考え出した。要求しているユーザーによって読まれた記事については

、私たちはしていない記事でクエリセット= Post.objects.filter(readstatus__reading_status =真、readstatus__user = self.request.user)

を渡すことができます依頼しているユーザーがまだ読んでいれば、Posts.objects.all()をテンプレートに渡すことができます。テンプレートで次に

{%instance.readstatus_set.all場合%を}私たちは物事を動作させるために、この行を必要としています。この要求ユーザが記事を読んだかどうかについてのデータがないと仮定すると、インスタンスはreadstatus_set.allを持つべきではない。つまり、ユーザはまだ記事を読んでいない。条件をチェックすると、ループ内の他の条件をチェックすることができます。

+0

あなた自身の答えを受け入れることができます。 – e4c5

関連する問題