无法获取属于 django 中的用户的配置文件对象



我在Django中有一个博客应用程序,在主页上我显示所有帖子以及发布的用户。但是,我现在尝试在用户名旁边添加用户的个人资料图像,但我似乎无法从 Profile 对象中提取任何数据。在我的模板中,当我循环浏览帖子时,诸如{{ post.user }}之类的代码工作正常,但是当我尝试扩展post.user.profile.profile_image.url时,什么都没有显示。

models.py:

class Post(models.Model):
user = models.ForeignKey(User, on_delete= models.CASCADE)
class Profile(models.Model):
user = models.ForeignKey(User, on_delete= models.CASCADE)
profile_image = models.ImageField(default='image.png', upload_to='profile_images', blank=True, null=True)

views.py:

def home(request):
posts = Post.objects.annotate(comments_count=Count('comments')).order_by('-created_date')
common_tags = Post.tags.most_common()[:4]
title = ""
return render(request, 'post/home.html', {'posts': posts, 'common_tags': common_tags})

在我的 html 模板中,我只是在做一个{% for post in posts %}循环。

有什么想法吗?

谢谢!!

ForeignKey是一种多对一关系,因为多个Profile都可以指向同一个User。这也意味着,如果您不指定related_name=…参数 [Django-doc],您可以使用user.profile_set.all()访问相关的配置文件。

你可能需要的是一个OneToOneField[Django-doc]。这本质上是一个ForeignKey,但带有unique=True参数,但是名称约定也不同,如果你不指定related_name=…,那么它只是.modelname,所以这意味着你用user.profile访问Profile

因此,您可以将其更改为:

from django.conf import settings
class Profile(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete= models.CASCADE
)
profile_image = models.ImageField(
default='image.png',
upload_to='profile_images',
blank=True,
null=True
)
注意:通常最好使用settings.AUTH_USER_MODEL[Django-doc

] 来引用用户模型,而不是直接使用User模型 [Django-doc]。有关详细信息,请参阅文档的引用User模型部分。

最新更新