【问题标题】:Field containing a user or a string包含用户或字符串的字段
【发布时间】:2014-06-12 19:01:17
【问题描述】:

我有一个模型表示用户对博客的评论。我想让用户以登录用户或未注册用户的身份发表评论。根据具体情况,评论的作者将显示为带有个人资料链接的用户名,或者显示为一个简单的字符串(显示未注册用户选择的昵称)。

我应该如何在我的模型中实现它?

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

谢谢。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    还有 其他方法,但在同一模型上具有两个不同的字段是最高效的方法。

    【讨论】:

      【解决方案2】:

      拥有一个单独的 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 }} 之类的内容。

      【讨论】:

      • 谢谢。该属性是从数据库中读取作者的好方法。关于验证器我仍然不确定,因为我认为这取决于我如何实现表单来发表评论(我如何处理昵称字段的显示)。
      猜你喜欢
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2014-05-21
      • 2010-12-17
      • 2021-11-26
      • 2014-10-11
      相关资源
      最近更新 更多