Как отобразить связанные объекты через DetailView - PullRequest
1 голос
/ 04 апреля 2020

Я пытаюсь отобразить продукт и доступные бренды (имеет продукт как ForeignKey) для этого продукта через DetailView. Основываясь на Django документации и аналогичных ответах на stackoverflow, я попробовал приведенный ниже код, но он не работает. Информация о продукте отображается, а названия брендов - нет. Я проверил через django -admin, что бренды продуктов присутствуют в базе данных. Может кто-нибудь, пожалуйста, помогите.

Models.py

class Product(models.Model):
    name = models.CharField(max_length=256)
    price = models.IntegerField()
class Brand(models.Model):
    name = models.CharField(max_length=256)
    product = models.ForeignKey(Product,on_delete=models.PROTECT,related_name='Brands')

Views.py

class ProductDetailView(DetailView):
    model = Product

Urls.py

path('detail/<int:pk>/',views.ProductDetailView.as_view(),name='product_detail'),

product_detail. html

<table class="table table-bordered table-hover table-secondary">
  <tr>
    <th class="bg-secondary th-customer-detail">Name</th>
    <td>{{ product.name }}</td>
  </tr>
  <tr>
    <th class="bg-secondary th-customer-detail">Price</th>
    <td>{{ product.price }}</td>
  </tr>

</table>
<br>
<ul>
  {% for brand in product.brand_set.all %}
      <li>{{ brand.name }}</li>
  {% endfor %}
</ul>

1 Ответ

0 голосов
/ 04 апреля 2020

Вы можете сделать это так

class ProductDetailView(DetailView):
    model = Product
    context_object_name = 'product'

    def get_context_data(self,**kwargs):
        context = super(ProductDetailView,self).get_context_data(**kwargs)  #returns a dictionary of context
        primary_key = self.kwargs.get('pk')
        brands = Brand.objects.filter(product = primary_key)
        new_context_objects = {'brands':brands}
        context.update(new_context_objects)
        return context


<table class="table table-bordered table-hover table-secondary">
  <tr>
    <th class="bg-secondary th-customer-detail">Name</th>
    <td>{{ product.name }}</td>
  </tr>
  <tr>
    <th class="bg-secondary th-customer-detail">Price</th>
    <td>{{ product.price }}</td>
  </tr>

</table>
<br>
<ul>
  {% for brand in brands %}
      <li>{{brand.name}}</li>
  {% endfor %}

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