删除django中的用户后如何保留“用户名”?

时间:2016-08-26 01:54:45

标签: django

我创建了一个posts应用程序,并拥有像这样的comment模型

from django.db import models
from django.conf import settings

from posts.models import Post


class Comment(models.Model):

    author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL)
    post = models.ForeignKey(Post)

    content = models.CharField(max_length=400)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ('-created_at',)

    def __str__(self):
        return self.content

我登录并发表一些评论: enter image description here

删除用户rightx2后,它变为nullNoneenter image description here

更糟糕的是,它也改变了order条评论!

我想让username仍在那里,并继续订购。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

不要使用models.ForeignKeyauthor模型中设置Comment属性,而是尝试CharField,并在views.py的评论函数中添加作业行每当Comment.author创建它时,请将此author属性等于其作者姓名。

希望这会有所帮助:)

答案 1 :(得分:1)

正在设置null,因为您将author定义为null=Trueon_delete=models.SET_NULL,为了保持作者ID的完整性,您可以使用on_delete=models.DO_NOTHING但作为doc says

  

您需要手动将ON DELETE约束添加到数据库中   字段

但是为了真正保留用户名,您需要对其进行非规范化并使用单独的username字段,您需要在保存评论时设置该字段。