如何获取供应商产品所属的所有产品类别

Posted

技术标签:

【中文标题】如何获取供应商产品所属的所有产品类别【英文标题】:How can i get all the product categories a suppliers product belongs 【发布时间】:2021-06-17 14:13:48 【问题描述】:

我正在使用供应商管理系统。我需要进行一种特定类型的查询,但我在实现时遇到了问题。我有用户模型,然后是 user_type,它有两种类型,供应商和管理员。当然,我需要实现的过滤器是基于供应商的,因为只有供应商才能创建产品,他们还必须指定哪些类别。

我的问题:如何获取供应商产品所属的所有类别。

我的问题编辑:如何获取每个供应商的产品并传入<td>标签上的模板

models.py

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=254, unique=True)
        
    def get_email(self):
        return self.email

class user_type(models.Model):
    is_admin = models.BooleanField(default=False)
    is_supplier = models.BooleanField(default=False)
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    def __str__(self):
        if self.is_supplier == True:
            return User.get_email(self.user) + " - is_supplier"
        else:
            return User.get_email(self.user) + " - is_admin"

    @property
    def get_categories(self):
        return Category.objects.filter(product__user=self.id).distinct()

class Category(models.Model):
    name = models.CharField(max_length=256)

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=36)
    price = models.PositiveIntegerField()    
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

views.py

def Viewsupplier(request):
    title = "All Suppliers"
    suppliers = User.objects.filter(user_type__is_supplier=True)
    categories = Category.objects.filter(product__user='2').distinct()
    context = "suppliers":suppliers, "title":title, "categories":categories
    return render(request, 'core/view-suppliers.html', context)

查看供应商.html

<table class="table table-borderless table-data3">
<thead>
<tr>
    <th>No</th>
    <th>Email</th>
    <th>Telephone</th>
    <th>Category(s)</th>
    <th>Country</th>
</tr>
</thead>
<tbody>
% for supplier in suppliers %
<tr>
    <td>forloop.counter</td>
    <td>supplier.email</td>
    <td>supplier.telephone</td>
    <td>supplier.get_categories</td>
    <td>supplier.country</td>
</tr>
% empty %
    <tr><td class="text-center p-5" colspan="7"><h4>No supplier available</h4></td></tr>
% endfor %
</tbody>
</table>

【问题讨论】:

【参考方案1】:

您可以使用以下方式过滤:

Category.objects.filter(<b>product__user=<i>myuser</i></b>)<b>.distinct()</b>

其中 myuser 是您要过滤的用户。

.distinct(…) [Django-doc] 将阻止返回 相同 Category 的次数,因为该用户有 Products。

【讨论】:

@感谢您的快速响应,非常感谢。 我在尝试之后得到了这个错误。 AttributeError:“QuerySet”对象没有属性“distint” @coderboy:这是一个错字,它是.distinct()c 我也是这么想的。非常感谢 @coderboy:你需要遍历类别,所以% for category in supplier.get_categories % category % endfor %

以上是关于如何获取供应商产品所属的所有产品类别的主要内容,如果未能解决你的问题,请参考以下文章

获取 WooCommerce 中的所有产品类别

如何在woocommerce中获取特定类别的所有产品?

如何从一个随机网站上抓取所有产品?

如何在 Laravel 中明智地获取产品类别?

Drupal Views / Node Reference 获取父母关系

CakePHP 我将如何获取类别明智的产品?