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.