отношение один ко многим в Django - PullRequest
1 голос
/ 20 января 2020

У меня есть две модели с отношениями один-ко-многим, такие как

class Speciality(models.Model):
name = models.CharField(max_length = 256)
code = models.CharField(max_length = 256)
def __str__(self):
    return self.name

class Product(models.Model):
name = models.CharField(max_length = 256)
code = models.CharField(max_length = 256)
reg_code = models.CharField(max_length = 256)
packe_size = models.CharField(max_length = 256)
type = models.CharField(max_length = 256)
category = models.ForeignKey(Speciality, on_delete=models.CASCADE)

его URL

path('speciality/<int:pk>',views.SpecialityDetailView.as_view(),name = 'speciality_product'),

, а вот CBV

class SpecialityProductView(generic.ListView):
    model = Product
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['product_list'] = self.object.category_id.all()
        return context

Я хочу, чтобы список продуктов основывался на указании c Специальности

Ответы [ 2 ]

1 голос
/ 20 января 2020

Я хочу список продуктов на основе спецификаций c Speciality.

Тогда это больше похоже на DetailView [Django -doc] , где вы передаете в свой контекст список связанных Product s (или просто отображаете их в своем шаблоне):

class SpecialityProductView(generic.detail.<b>DetailView</b>):
    model = Speciality
    template_name = 'app/speciality.html'

В шаблоне вы можете отобразить это как :

<!-- app/speciality.html -->
{{ speciality.name }}
{% for product in <b>speciality.product_set.all</b> %}
    {{ product.name }}
{% endfor %}
1 голос
/ 20 января 2020

Вам нужно использовать DetailView вместо ListView, как это

    class SpecialityProductView(generic.<b>DetailView</b>):
        model = <b>Speciality</b>
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            context['product_list'] = self.object.<b>product_set</b>.all()
            return context
...