2 модели для html в Django

Я хочу перечислить некоторые данные в моем html файле, ниже приведены мои 2 файла моделей и мой вопрос в том, как показать имя_продукта в моем html?

class ProductsDescription(models.Model):
    products_id = models.ForeignKey(to='Products', to_field='products_id', on_delete=models.CASCADE, unique=True)
    products_name = models.CharField(max_length=255, blank=True, null=True) 

  class Products(models.Model):
    products_id = models.AutoField(primary_key=True)
    products_type = models.IntegerField(blank=True, null=True)
    manufacturers_id = models.IntegerField(blank=True, null=True)
    brand_id = models.IntegerField(blank=True, null=True)

products.py

from myadmin.models import Products as products
from myadmin.models import ProductsDescription

def index(request, pIndex=1):
    mainproducts = products.objects
    umproducts = mainproducts.filter(products_type=1)
    pIndex = int(pIndex)
    page = Paginator(umproducts, 25)
    maxpages = page.num_pages
    if pIndex > maxpages:
        pIndex = maxpages
    if pIndex < 1:
        pIndex = 1
    list2 = page.page(pIndex)
    plist = page.page_range
    context = {"umproducts": list2, 'plist': plist, 'pIndex': pIndex, 'maxpages': maxpages }
    return render(request, "index.html", context)

в моем html

<table class="table table-hover">
      <tr>
      <th>ID</th> 
      <th>TYPE</th>
      <th>Products Name</th>
      <th>MANUFACTORES</th>
      <th>BRAND</th>
      </tr>
      {% for vo in umproducts %}
           <tr>
           <td>{{ vo.products_id}}</td>
           <td>{{ vo.products_type }}</td>
           <td>{{ vo.products_name }}</td>
           <td>{{vo.products_manufacturers}}</td>
           <td>{{ vo.products_brand}}</td>
           </tr>

Проблема может быть в том, что я не могу поместить имя_продукта из ProductsDescription в кортеж umproducts, и мой вопрос в том, как соединить 2 модели и назвать новый кортеж, после чего я смогу использовать его в html?

В этой строке есть несколько проблем...

products_id = models.ForeignKey(to='Products', to_field='products_id', on_delete=models.CASCADE, unique=True)

Сначала измените название на product. Вы все еще можете ссылаться на ProductDescription.product_id, и django поймет, что вы имеете в виду id, в противном случае вы будете удваивать поля с одинаковыми именами, что впоследствии станет головной болью. Вероятно, вам также не нужен product_id в вашей модели Products. Django создает поля ID автоматически для моделей.

Далее, дайте ему связанное имя, например, related_name="descriptions", для более легкого доступа.

Наконец, вы указали внешний ключ с unique=True. Внешний ключ с unique = True - это, по сути, связь один-к-одному, и django предлагает создавать таблицы, которые вы используете вместо него.

Итак, подводя итог, можно использовать в ProductsDescription

 product = models.OneToOneField(Products, on_delete=models.CASCADE, related_name="description").  

NB: Вам нужно будет сделать миграции, а затем снова мигрировать, поскольку это изменение базы данных.

Преимущество в том, что вы можете затем ссылаться на него в своем шаблоне как

{{vo.product.description.product_name}}

Обычно это было бы немного сложнее, так как внешний ключ, как правило, относится к множеству один к одному, поэтому вы получите набор и должны будете просмотреть его, чтобы найти нужный ключ. В данном случае, поскольку у вас уникальный ключ =True, вы можете использовать один к одному и избавить себя от некоторых проблем.

Вернуться на верх