Django - Фильтр объектов из дочернего класса с первичным ключом родительского класса, переданным в URL

Я новичок в Django и пытаюсь передать все сообщения, сделанные для каждого автомобиля, в html-странице с подробным описанием автомобиля.

My vehicles/models.py:

*vehicles/models.py*

class Vehicle(models.Model):

     
    TESLA = 'TESLA'
    MAZDA = 'MAZDA'
    VOLVO = 'VOLVO'
    VEHICLE_CHOICES = (
        (TESLA, "Tesla"),
        (MAZDA, "Mazda"),
        (VOLVO, "Volvo"),
        )

    owner =  models.ForeignKey(User, on_delete=models.CASCADE) 
    
    model = models.CharField(max_length=9,
       
                    choices=VEHICLE_CHOICES,
                    default=TESLA)

    def __str__(self):
            return self.model

    class Meta:
        db_table = "vehicles"

My Posts models.py:

*blog/models.py*

from django.db import models
from django.contrib.auth.models import User


     
class Post(models.Model):
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    vehicle =  models.ForeignKey(Vehicle, on_delete=models.CASCADE, default=None )
    
    def get_absolute_url(self):

        return reverse('post-detail', kwargs ={'pk': self.pk} )
  
    class Meta:
        db_table = "chargehistory"

Я уже передаю в html файл все транспортные средства для каждого пользователя, и теперь я хотел бы получить все сообщения, сделанные для каждого транспортного средства пользователя.

*vehicles/views.py*

class UserVehicleListView(ListView):
    model = Vehicle
    template_name = 'vehicles/vehicles.html'  # <app>/<model>_<viewtype>.html
    context_object_name = 'vehicles'
    
    def get_queryset(self):
        return Vehicle.objects.filter(owner_id= self.request.user.id)

class UserVehicleDetailView(DetailView):
    model = Vehicle


*vehicles/urls.py*



urlpatterns = [
    path('vehicles', UserVehicleListView.as_view(), name='vehicle-list'),
    path('vehicles/<int:pk>',  UserVehicleDetailView.as_view() , name='vehicle-detail'),

]

urlpatterns += staticfiles_urlpatterns()


Поскольку я передаю первичный ключ vehicle в пути, есть ли способ отфильтровать посты на основе этого ключа и передать его в vehicle_detail.html? Должен ли я передать его как ListView в том же пути, что и UserVehicleDetailView? Если вы можете мне помочь, это было бы здорово, потому что я застрял. Спасибо!

Вы можете напрямую использовать DetailView[django-doc], как использовали вы. Ваше route для DetailView в urls.py правильно. Вы должны передать его pk из html-части.

views.py

class UserVehicleDetailView(DetailView):
    model=Vehicle
    template_name="any_folder_name/any_file.html"
    context_object_name="single_vehicle"

Note: При использовании DetailView не следует запускать цикл, так как это один объект.

anyfile.html


{% if "single_vehicle" %}
    <p>{{single_vehicle.owner.username}}</p>
{% endif %}

Здесь вы можете получить доступ ко всем его свойствам с помощью цепочки, и вы также можете изменить pk на другое имя, скажем, id и затем упомянуть его в вашем UserVehicleDetailView как pk_url_kwarg="id", тогда это также будет работать.

Но сначала нужно передать pk через ListView через цикл, а затем получить доступ к ним как к единому объекту через DetailView.

Note: Всегда давайте / в конце каждого маршрута в функции path.

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