Отображение объектов из встроенной модели в DetailView

У меня есть 2 модели Product и Resource. Resource должен быть моделью TabularInline в моей панели администратора. Я пытаюсь отфильтровать названия ресурсов, которые относятся только к этому продукту. Поскольку это ForeignKey, я должен использовать select_related, но я не уверен, как использовать его в моем случае. Пока что цикл в моем HTML-файле дает мне все файлы продаж (от всех продуктов).

models.py

class Product(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField('title', max_length=400, default='')
    slug = models.SlugField(unique=True, blank=True, max_length=600)

class Resource(models.Model):
    id = models.AutoField(primary_key=True)
    type = models.CharField(max_length=32, choices=RESOURCE_TYPE, default='sales')
    title = models.CharField(max_length=400, blank=False, null=False, default='')
    related_files = models.FileField(upload_to='recources/', null=True, blank=True) 
    publish = models.DateTimeField('Published on', default=timezone.now)
    resources = models.ForeignKey(Product, default='', on_delete=models.PROTECT, null=True, related_name='resources')

admin.py

class Resourceinline(admin.TabularInline):
    model = Resource
    
class ProductAdmin(ImportExportModelAdmin):
    inlines = [
        Resourceinline,
    ]
    resource_class = ProductResource

admin.site.register(Product, ProductAdmin)

views.py

class ProductDetailView(DetailView):
    template_name = 'ProductDetailView.html'
    model = Product

    def get_context_data(self, **kwargs):
            context = super(ProductDetailView, self).get_context_data(**kwargs)
            resources_sales = Resource.objects.select_related('resources').filter(resources_id =1, type='sales') # not sure what to put here
            context['resources_sales'] = resources_sales
            return context

ProductDetailView.html

{% for resource in resources_sales.all %}
    <p>{{resource.title}}</p>
{% endfor %}

Вопрос

Где я делаю ошибку и как я могу отобразить объекты ресурсов, которые связаны с type=sales и относятся только к этому продукту в DetailView.

Редактировать

Я понял, что есть столбец с именем resources_id, который связывает обе модели. Теперь я пытаюсь отфильтровать его по id текущего DetailView. Я поместил resources_id=1 в свой views.py, но он должен относиться к DetailView, который пользователь просматривает в данный момент. Я пытаюсь поставить resources_id=self.kwargs['id'], но это дает мне KeyError at /product/test-product/ 'id' Как я могу это сделать?

поскольку вы используете generic DetailView вы можете ссылаться на текущий объект с помощью self.get_object(). на самом деле это возвращает единственный объект, который отображает представление. однако вы можете использовать instateself.object тоже.

поэтому вы можете фильтровать Product связанные Resource, используя Resource.objects.filter(resources=self.get_object(), type='sales')

вы можете прочитать больше Однообъектные миксины

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