渲染 ManyToManyField 时的 Auth.User.None

Posted

技术标签:

【中文标题】渲染 ManyToManyField 时的 Auth.User.None【英文标题】:Auth.User.None when rendering a ManyToManyField 【发布时间】:2019-07-24 00:38:21 【问题描述】:

我正在尝试从一个模型渲染一个 ManyToManyField,该模型渲染一个酒店列表,其中包含属于每个酒店的员工。

我正在尝试在模板中显示当前酒店内的用户,但出现错误

auth.User.None

我的模板

% for Hotel in object_list %
          Hotel.collaborateurs 
              % endfor %

我的models.py

class Hotel(models.Model):
collaborateurs = models.ManyToManyField(User, verbose_name="Liste des collaborateurs autorisés")
              (....)

谢谢

编辑;

我可以渲染用户,但我有一个不美观的代码正在渲染:.

我只想呈现用户名。

【问题讨论】:

【参考方案1】:

你需要使用.all,因为多对多关系总是在 django 中延迟加载。

Hotel.collaborateurs.all

此外,Python 中的变量名应为小写。

collaborateurs = 需要在左侧缩进。

希望对您有所帮助。

【讨论】:

这可行,但它在我的模板中呈现类似“]>”的内容,这不是我明确排除的内容 覆盖 __str__() 方法来改变它。【参考方案2】:

models.py

class Song(models.Model):
user = models.ManyToManyField(User)
song_name = models.CharField(max_length=50)
song_duration = models.IntegerField()

def written_by(self):
    return ",".join([str(p) for p in self.user.all()])

html 文件

    % for data in data %

        data.written_by   # It returns username
        data.song_name
        data.song_duration

    % endfor %

【讨论】:

【参考方案3】:

你可以使用

 Hotel.collaborateurs.all.count 

这将提供总数。

【讨论】:

以上是关于渲染 ManyToManyField 时的 Auth.User.None的主要内容,如果未能解决你的问题,请参考以下文章

在 django 模板中渲染 ManytoManyfield 而不复制父模型的内容

使用自定义字段扩展 Django 的 ManyToManyField

ThinkPHP角色控制时的错误

渲染静态网站时的条件挂钩

微信小程序:新闻列表渲染

使用画布时的渲染体验不正确。帆布