渲染 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 而不复制父模型的内容