如何使属性自动与用户关联?姜戈

How can I make an attribute associate automatically with User? django

我正在使用 Django 制作一个简单的网站。 我添加了一个 'Comment' 模型来在博客 post 上创建评论部分。我想在 html.

中打印出每个 'date_added'、'text' 和 'owner' 属性
class User_Comment(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    def __str__(self):
        return self.text

我的 'owner' 属性有问题。

owner = models.ForeignKey(User, on_delete=models.CASCADE)

如果我尝试使用它进行迁移,Django 会要求我提供默认值。

It is impossible to change a nullable field 'owner' on user_comment to non-nullable 
without providing a default. This is because the database needs something to populate 
existing rows.
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for 
this column)
 2) Ignore for now. Existing rows that contain NULL values will have to be handled 
manually, for example with a RunPython or RunSQL operation.
 3) Quit and manually define a default value in models.py.

如果我将'blank=True'、'null=True'参数添加到onwer属性, 该属性有效,但在添加评论时不会自动与所有者关联。所以我必须去管理员那里手动将评论指定给它的所有者。

    owner = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)

最好的解决方案是什么?我想自动打印 html 中的 'owner' 属性,而无需手动处理。非常感谢您抽出宝贵的时间。

准确解释这里发生的事情可能会有所帮助。

您已将附加字段所有者添加到现有评论模型。因为已经有一些现有评论,迁移过程(更新 Django 对数据库中模型的理解)需要知道如何处理当前没有所有者的现有评论记录。

这是一个 one-time 纯粹处理现有记录的过程。

但是,当您创建新评论时,您还需要处理所有者是谁,以便自动填充模型字段。假设您有一个接受用户评论的模型表单,并且您的视图测试是否有评论被发布:

form = CommentForm(request.POST or None)

if request.method == "POST" and form.is_valid:
    #create an uncommitted version of the form to add fields to
    form_uncommitted = form.save(commit=False)
    #here we explicitly assign the owner field to the user that made the request
    form_uncommitted.owner = request.user 
    #then save the form data plus our added data
    form_uncommitted.save()