Невозможно получить доступ к данным с использованием категорий.products .all в представлении шаблона.Джанго Модели с внешним ключом - PullRequest
0 голосов
/ 28 июня 2019

У меня есть модели, имеющие отношение с использованием внешнего ключа.

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)
    matType = models.CharField(max_length=100,default='Use comma , to seperate multiple materials') 
    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) #here the categories get the category i clicked on homepage.
   products = Product.objects.all()
   return render(request, 'products.html', {'categories':categories,'products':products})

Тогда products.html:

<!--Full Code not shown for easy understanding-->
{% for prod in categories.products.all %}

       {{categories.name}} 
        <tr>
          <td>{{ prod.name }}</td>
          <td>{{ prod.matType }}</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
        </tr>
      {% endfor %}

Webpage is categories.products.all in for loop Таким образом, категории - это имя, которое можно использовать для доступатекущая категория. Продукты - список всех продуктов.

Я пробовал этот код выше, который не дает результата.Теперь в приведенном ниже коде показаны все объекты товаров.

<!--Full Code not shown for easy understanding-->
{% for prod in products %}

       {{categories.name}} 
        <tr>
          <td>{{ prod.name }}</td>
          <td>{{ prod.matType }}</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
        </tr>
      {% endfor %}

Webpage with only 'products' in for loop

Но при этом отображаются все товары независимо от категорий.Так что эта футболка для вечеринок в категории Мужчины также показана в разделе Женщины.

Webpage of Women Category products

Я пробовал печатать только все продукты {% for prod in products %} Строка в коде выше{{categories.name}} показывает название класса.Это работает нормально, без проблем.

Бэкэнд может без проблем обращаться к базе данных, но я не могу разобраться в разделе шаблона. Здесь продукт и категории, сохраненные как Мужчины в объекте продукта.Django Admin Panel With product Details.

Я должен быть в состоянии увидеть Мужские товары категории "Мужчины" и Женские товары категории "Женщины".

1 Ответ

2 голосов
/ 28 июня 2019

Вам нужно использовать catlevel1 вместо продуктов:

{% for prod in categories.catlevel1.all %}

   {{categories.name}} 
    <tr>
      <td>{{ prod.name }}</td>
      <td>{{ prod.matType }}</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
    </tr>
  {% endfor %}

Поскольку вы определили related_name как catlevel1 при созданииСоотношение ForeignKey между Product и Cat1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...