Соединение "один ко многим" не может настроить переход по первичному ключу
У меня есть страница с марками автомобилей, и мне нужно, чтобы при нажатии на марку я перенаправлялся на страницу со всеми автомобилями этой марки. По какой-то причине я не могу получить доступ к тому, что мне нужно в теге 'a'.
class Marks(models.Model): // MODELS
mark = models.CharField(max_length=64)
def __str__(self):
return self.mark
class Cars(models.Model):
CarName = models.CharField(max_length=64)
mark = models.ForeignKey(Marks, on_delete=models.CASCADE)
def __str__(self):
return self.CarName
def marks_list(request): // VIEWS
marks = Marks.objects.all()
return render(request, 'cars.html', {'marks':marks})
def specific_car(request, pk):
Car = Cars.objects.get(id=pk)
return render(request, 'car_detail.html', {'cars': Car})
urlpatterns = [
path('marks/', marks_list), // urls
path('admin/', admin.site.urls),
path('marks/<pk>', specific_car)
]
{% for mark in marks %} // cars.html
<div>
<a href="{{mark.cars}}">
{{mark.mark}}</a>
</div>
{% endfor %}
При нажатии на тег 'a' в файле cars.html мне нужно получить файл car_detail.html с названиями автомобилей. Как я должен написать путь к 'mark_id'? Структура приложения
В вашем шаблоне переменная mark.cars
в настоящее время не определена. Чтобы использовать ее, вы должны добавить related_name="cars"
к определению поля ForeignKey в вашем классе Cars
:
class Cars(models.Model):
# ...
mark = models.ForeignKey(Marks, on_delete=models.CASCADE, related_name="cars")
# ...
Альтернативно, вы можете ссылаться на mark.cars_set
в вашем шаблоне, так как cars_set
будет по умолчанию для related_name
, выбранного Django.
В официальной документации есть довольно хорошее объяснение и примеры того, что именно происходит: Link