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

Can';无法获取django中属于用户的配置文件对象,django,Django,我在Django中有一个博客应用程序,在主页上我会显示所有帖子以及发布的用户。但是,我现在尝试将用户的配置文件图像添加到用户名旁边,而我似乎无法从配置文件对象中提取任何数据。在我的模板中,当我在帖子中循环时,像{{post.user}}这样的代码可以很好地工作,但是当我尝试扩展到像post.user.profile.profile\u image.url这样的代码时,什么也没有显示 models.py: class Post(models.Model): user = models.Fo

我在Django中有一个博客应用程序,在主页上我会显示所有帖子以及发布的用户。但是,我现在尝试将用户的配置文件图像添加到用户名旁边,而我似乎无法从配置文件对象中提取任何数据。在我的模板中,当我在帖子中循环时,像
{{post.user}}
这样的代码可以很好地工作,但是当我尝试扩展到像
post.user.profile.profile\u 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模板中,我只是做了一个
{%forpost-in-posts%}
循环

有什么想法吗


谢谢

A
ForeignKey
是一个多对一的关系,因为多个
Profile
s都可以指向同一个
用户。这也意味着,如果您不指定,您可以使用
user.profile\u set.all()
访问相关的配置文件

你可能需要的是一份工作。这本质上是一个
外键
,但是有一个参数,但是名称约定也不同。如果您不指定
相关的名称=…
,那么它只是
.modelname
,这意味着您可以使用
user.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
    )
来自django.conf导入设置的

类配置文件(models.Model):
用户=models.OneToOneField(
settings.AUTH\u用户\u模型,
on_delete=models.CASCADE
)
profile_image=models.ImageField(
default='image.png',
上传图片到class='profile',
空白=真,
空=真
)
注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见


由于您使用的是
ForeignKey
,因此用户可以拥有多个配置文件。您可能应该将其更改为
OneToOneField
。就是这样,谢谢!那么外键是一对多关系@WillemVanOnsemno多对一:)哦,好的,谢谢你!8分钟后我会接受你的回答。这工作做得很好。非常感谢您的回答和透彻的解释!!