为了账号安全,请及时绑定邮箱和手机立即绑定

无法理解 Django 中的查询集

无法理解 Django 中的查询集

BIG阳 2021-09-11 21:02:23
我有一个连接到模型的用户个人资料页面,其中包含以下字段:class Profile(models.Model):    user = models.OneToOneField(User, on_delete=models.CASCADE)    image = models.ImageField(default='default.jpg', upload_to='profile_pics')这就像它应该的那样工作;加载连接到相关用户的个人资料图像,并区分用户。我现在要做的是将一个单独的图库模型连接到个人资料页面,用户可能有一个小图片库可以随意使用。画廊模型如下所示:class GalleryModel(models.Model):    user = models.ForeignKey(User, on_delete=models.CASCADE)    img_1 = models.ImageField(default='default.jpg', upload_to='images')    img_2 = models.ImageField(default='default.jpg', upload_to='images')    img_3 = models.ImageField(default='default.jpg', upload_to='images')views.py 文件如下所示:class ProfileDetailView(DetailView):    model = Profile   # Is something iffy here? Should this refer to the GalleryModel as well?    template_name = 'account/view_profile.html'    def get_object(self):        username = self.kwargs.get('username')        if username is None:            raise Http404        return get_object_or_404(User, username__iexact=username, is_active=True)    def get_context_data(self, **kwargs):        context = super().get_context_data(**kwargs)        username = self.object.username        context['person'] = GalleryModel.objects.get(user__username=username)   #loads username string        context['img_1'] = GalleryModel.objects.last().img_1        context['img_2'] = GalleryModel.objects.last().img_2        context['img_3'] = GalleryModel.objects.last().img_3        return context我尝试了很多想法(即 filter() 和 get() 方法的各种方法)并仔细检查https://docs.djangoproject.com/en/2.1/topics/db/queries/,但我无法解决。例如 filter(username__iexact=username) 似乎并没有解决问题,主题的变化也不会产生任何错误消息,我真的不明白。如果我在模板中插入 {{ person }},我可以获得用户名,但是如何将对象(图像)连接到 GalleryModel 中的用户名?尝试以下是不行的:GalleryModel.objects.get(user__username=username).img_1和往常一样,我有一种怪异的感觉,我错过了一些相当简单的东西:)注意!:我知道 last() 方法显然不是我应该做的,但到目前为止,这是我设法将图像渲染到模板的唯一方法。
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

如果要将图库连接到配置文件,则必须将配置文件添加为外键,而不是用户。

class GalleryModel(models.Model):
    profile = models.ForeignKey(Profile, on_delete=models.CASCADE)

除非您有其他类型的画廊,否则请使用 Gallery(models.Model)。


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信