包含用户或字符串的字段

时间:2014-04-27 07:33:43

标签: django django-models

我有一个代表博客用户评论的模型。我想留下用户将其评论作为登录用户或未注册用户发布的可能性。根据具体情况,评论的作者将显示为带有其配置文件链接的用户名,或显示为简单字符串(显示未注册用户选择的昵称)。

我该如何在我的模型中实现这个?

我可以为评论的作者定义两个字段:UserField和CharField。然后我可以使用自定义验证器来确保填充这些字段中的一个而且只有一个。但是还有其他更好的方法可以获得上述行为吗?

感谢。

2 个答案:

答案 0 :(得分:0)

其他方式 ,但在同一模型上有两个不同的字段是性能最佳的字段。

答案 1 :(得分:0)

拥有单独的UserField和CharField可能是您最好的选择。但是我认为,实现它的方法比使用自定义验证器更好。创建这样的自定义属性会更容易:

models.py

class Comment(models.Model):
    user = models.ForeignKey(User, null=True)
    nickname = models.CharField(blank=True)

    @property
    def username(self):
        if self.user:
            return self.user.username
        else:
            return nickname

如果他们已登录,那么您只需将用户分配给评论。如果没有,则将昵称指定给评论。

这可确保您只需在评论模板中调用类似{{ comment.username }}的内容。