【问题标题】: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>

【问题讨论】:

    标签: django django-models django-views django-templates django-filter


    【解决方案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 %}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多