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

Django访问外键字段并获取其值

Django访问外键字段并获取其值

慕森王 2022-09-27 16:34:21
我正在尝试建立一个小型网上商店平台,用户可以在其中创建商店,选择产品类别并向其添加产品。为了实现我的目标,我创建了这个简化的 models.pyclass Organization(models.Model):    org_id = models.AutoField(primary_key=True)    company_name = models.CharField(max_length=255)    owned_by = models.OneToOneField(UserProfile, on_delete=models.CASCADE)    def __str__(self):        return f'{self.company_name} ORG'    def get_absolute_url(self):        return reverse('org-view', kwargs={'pk': self.org_id})class Category(models.Model):    CATEGORIES = ( ('electric', 'Electronics'), ('food', 'FrozenFood'), ('shoes', 'slippers') )    cat_name = models.CharField(max_length=255, choices=CATEGORIES)    def __str__(self):        return f'{self.cat_name} Category'    def get_absolute_url(self):        return reverse('cat-view', kwargs={'id': self.pk})class Product(models.Model):    org_id = models.ForeignKey(Organization, on_delete=models.CASCADE, blank=True, null=True)    cat_name = models.ForeignKey(Category, on_delete=models.CASCADE)    product_name = models.CharField(max_length=255)    def __str__(self):        return self.product_name在我看来,我想让用户保持在一个页面上,在那里他可以管理他的商店。我目前 views.py:class OrganizationDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView, FormMixin):    model = Organization    queryset = Organization.objects.all()    template_name = 'org/org_view.html'    form_class = ProductForm    def test_func(self):        org = self.get_object()        if self.request.user.profile == org.owned_by:            return True        return False    def get(self, request, *args, **kwargs):        self.object = self.get_object()        context = self.get_context_data()        pk = self.object.serializable_value('pk')        product = Product.objects.filter(org_id=pk)        return self.render_to_response(context)我需要帮助来理解一些事情:如何执行查询以检索他的所有产品,并能够看到产品所属的类别。我的错误解决方案:产品变量包含该商店的所有产品,包括指向类别pk的cat_name_id。这很好,但我需要类别的名称。我需要这样的东西:打印(product.category_name),我应该看到“电子产品”如何执行将同一类别下的项目组合在一起的查询。我已经花了几天时间试图理解这些查询,所以请解释像我五岁一样
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

您可以使用以下命令筛选一个用户的所有产品:

products = Product.objects.all().filter(org_id__owned_by=user)

请参阅文档:https://docs.djangoproject.com/en/3.0/topics/db/queries/#retrieving-specific-objects-with-filters。此处,“user”是User_Profile类中的用户对象。

关于您的第二个问题,我猜您想按类别对特定查询进行排序;在这种情况下,语句将是:

products = Product.objects.order_by('cat_name')

或者,您可以将两者与以下各项结合使用:

products = Product.objects.all().filter(org_id__owned_by=user).order_by('cat_name')


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号