0

我有这个模型

产品

class Product(models.Model):
    name = models.CharField(max_length=50)
    productId = models.AutoField(max_length=50,primary_key=True)
    productType = models.CharField(max_length=50)
    productPrice = models.PositiveIntegerField(default=0)
    matType = models.CharField(max_length=100,default='Use comma , to seperate multiple materials Ex. Cotton 90%, Spandex 10%') #Multiple Material divided by comma,mat1 is main material
    seller = models.ForeignKey(User, related_name='sellers',on_delete=models.CASCADE,default='NA')
    cat_1 = models.ForeignKey(Cat1,related_name='catlevel1',on_delete=models.CASCADE,default='NA')

我有两个外键,一个是User Class的卖家信息,另一个是Model Name Cat1的类别。同样,我有相关的名称catlevel1Sellers。我在 HTML 中使用此代码通过当前登录的用户访问产品。


{% for prod in user.sellers.all %}

        {% for color in prod.colors.all %}
         {% for size in prod.sizes.all %}
        <tr>
          <td>{{ prod.name }}</td>
          <td>{{ prod.productPrice }}</td>
          <td>{{ prod.matType }}</td>
          <td>{{ color.colorMain }},{{ color.colorTrim }}</td>
          <td>{{ size.nameSize }}</td>
          <td>{{ size.quantity }}</td>
        </tr>
        {% endfor %}
      {% endfor %}
    {% endfor %}

第一个循环(第一行):

{% for prod in user.sellers.all %}

通过 current_user 访问所有产品user。这sellers是外键的相关名称seller

我想使用Class 和underseller中的两个外键获取数据。Usercategoriescat1

因此,主要目标是获取当前用户和当前类别的产品。 我已经搜索了互联网,但找不到任何解决方案。许多解决方案可以追溯到 Django 1.3 天,现在不起作用。

一些建议使用select_related ,但我不知道如何在这里使用它。

更新:使用中的模型:

class Cat1(models.Model):
    name = models.CharField(max_length=30)
    description = models.CharField(max_length = 100)

    def __str__(self):
        return self.name



class Product(models.Model):
    name = models.CharField(max_length=50)
    productId = models.AutoField(max_length=50,primary_key=True)
    productType = models.CharField(max_length=50)
    productPrice = models.PositiveIntegerField(default=0)
    matType = models.CharField(max_length=100,default='Use comma , to seperate multiple materials Ex. Cotton 90%, Spandex 10%') #Multiple Material divided by comma,mat1 is main material
    seller = models.ForeignKey(User, related_name='sellers',on_delete=models.CASCADE,default='NA')
    cat_1 = models.ForeignKey(Cat1,related_name='catlevel1',on_delete=models.CASCADE,default='NA')

查看使用:

def cat_products(request,pk):
   categories = get_object_or_404(Cat1, pk=pk)
   colors = Color.objects.all()
   products = Product.objects.all()
   sizes = Size.objects.all()
   sellerproducts = user.sellers.select_related('cat_1')filter(cat_1__categories=category)
   user = request.user
   return render(request, 'products.html', {'categories':categories,'products':products,'colors':colors,'sizes':sizes,'user':user,'sellerproducts':sellerproducts})

这就是我使用的方式: user.sellers.select_related('cat_1')filter(cat_1__categories=category) 我知道我必须调整变量的名称,但错误是无效的语法。

4

2 回答 2

1

您的模板应该实际呈现响应。您在答案中所做的方式是不可行的。你只是隐藏了额外的结果。相反,您应该查询所需的结果。

你可以做user.sellers.select_related('cat_1').filter(cat_1__categories=category)并将结果传递给你的模板。但是您需要在视图中执行此查询。那是因为它会给你更多的控制,如果你想实现任何分页或任何额外的功能,它会很容易做到。

于 2019-07-03T06:38:26.120 回答
0

按照这个问题的答案>这是正确的方法。

{% for prod in user.sellers.all %}
       {% if prod.cat_1.name == categories.name %}
         {% for color in prod.colors.all %}
         {% for size in prod.sizes.all %}
          <tr>
            <td>{{ prod.name }}</td>
            <td>{{ prod.productPrice }}</td>
            <td>{{ prod.matType }}</td>
            <td>{{ color.colorMain }},{{ color.colorTrim }}</td>
            <td>{{ size.nameSize }}</td>
            <td>{{ size.quantity }}</td>
          </tr> 
          {% endfor %}
         {% endfor %}
      {% endif %}
    {% endfor %}

我使用此代码来隔离数据。使用ifblock 检查第一行中使用的 current_user 过滤器循环选择的产品是否与当前选择的类别具有相同的类别名称

这里categories保存当前类别,prod保存所选产品。

{% if prod.cat_1.name == categories.name %} 上面的行检查名称。然后打印if里面的信息。 {%endif%}if 用于结束 if 标记。

于 2019-07-03T06:20:26.050 回答