如何获取供应商产品所属的所有产品类别
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
的次数,因为该用户有 Product
s。
【讨论】:
@感谢您的快速响应,非常感谢。 我在尝试之后得到了这个错误。 AttributeError:“QuerySet”对象没有属性“distint” @coderboy:这是一个错字,它是.distinct()
和c
。
我也是这么想的。非常感谢
@coderboy:你需要遍历类别,所以% for category in supplier.get_categories % category % endfor %
。以上是关于如何获取供应商产品所属的所有产品类别的主要内容,如果未能解决你的问题,请参考以下文章