Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django将模型外键默认值应用于现有记录_Python_Django - Fatal编程技术网

Python Django将模型外键默认值应用于现有记录

Python Django将模型外键默认值应用于现有记录,python,django,Python,Django,非常感谢您抽出时间 之前,我发布了这个问题 问题是:当这篇文章已经被另一个用户阅读时,我无法过滤出一个用户没有阅读的文章 我明白了为什么我不能这么做——因为我有数据,我没有使用Django就写入了数据库,尽管我将每篇文章的默认阅读设置为False——根本没有记录 然后,我在管理员中将一篇文章手动设置为未读,一切正常,因为现在数据库中有一条记录表明该用户尚未阅读该文章 现在的问题是: 如何为数据库中所有现有用户的所有现有文章设置“未读” 除非新用户真的阅读了文章,否则如何才能让每一个新用户都读不到

非常感谢您抽出时间

之前,我发布了这个问题

问题是:当这篇文章已经被另一个用户阅读时,我无法过滤出一个用户没有阅读的文章

我明白了为什么我不能这么做——因为我有数据,我没有使用Django就写入了数据库,尽管我将每篇文章的默认阅读设置为False——根本没有记录

然后,我在管理员中将一篇文章手动设置为未读,一切正常,因为现在数据库中有一条记录表明该用户尚未阅读该文章

现在的问题是:

如何为数据库中所有现有用户的所有现有文章设置“未读”

除非新用户真的阅读了文章,否则如何才能让每一个新用户都读不到文章呢

为了您的方便,我把代码复制到了这里

我的模型:

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 %}
{%用于数据%中的信息]
  • {{info.post_date}
  • {{info.get_abstract_content}
{%endfor%}
天哪,我刚刚想出了怎么做

对于请求用户已阅读的文章,我们只需传递queryset=Post.objects.filter(readstatus\uu reading\u status=True,readstatus\uu user=self.request.user)

对于请求用户尚未阅读的文章,我们可以将Posts.objects.all()传递到模板中

然后在模板中:

我们需要{%if-instance.readstatus\u set.all%}这一行使事情正常进行。假设没有关于此请求用户是否已阅读文章的数据,则实例不应设置readstatus_.all,这意味着用户尚未阅读文章。检查此if条件后,我们可以执行以检查循环中的其他条件