2017-06-06 58 views
2

非常感謝您抽出寶貴時間。Django將模型外鍵默認值應用於現有記錄

此前,我發佈了這個問題,How to Get Unread Posts for Users

問題是:我無法過濾掉這篇文章已經被另一個用戶閱讀過的文章。

我想出了爲什麼我不能這樣做 - 因爲我有數據寫入數據庫而不使用Django,儘管我將每個帖子的讀取默認設置爲False ----根本沒有記錄。

然後,我手動將一篇文章設置爲未讀取到Admin中的用戶,一切正常,因爲現在在數據庫中有一條記錄,指出此用戶尚未讀取此特定文章。現在

的問題是:

如何設置「未讀」爲每個現有的文章,我在數據庫中所有現有的用戶?

除非新用戶真正閱讀它,否則文章如何保持每個新用戶的未閱讀?

爲了您的方便,我將代碼複製到此處。

我的模型:

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