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, вы можете использовать один к одному и избавить себя от некоторых проблем.