Я хорошо прочитал документацию Django в поле ManyToMany.Особенно тот, который здесь .Мне совершенно ясно, что с этим можно сделать.Например, если у меня есть модель категории и модель запуска, в которой у категории может быть много запусков, а запуск может принадлежать многим категориям, то здесь пригодится связь ManyToMany.Я могу перечислить все категории в моем шаблоне, каждая категория кликабельна и приводит к списку всех стартапов в другом шаблоне, принадлежащем к этой категории.Теперь, имея это, я хочу пойти немного дальше.Перейдя на страницу сведений о конкретной категории, которая представляет собой список принадлежащих ей стартапов, я хочу, чтобы каждый элемент на этой странице сведений также приводил к другой странице сведений, где я могу отображать дополнительную информацию о конкретном запуске.
Моя главная проблема в том, как я могу это реализовать.Я прошел через множество вопросов, заданных в отношении поля ManyToMany и его запросов, особенно здесь , но, похоже, все они задают вопрос о том, как получить доступ к связанным объектам в категории, например, на странице сведений, и она заканчивается.там.Я хочу перейти со страницы сведений на другую страницу сведений.
from django.db import models
Модель моей категории:
class Category(models.Model):
name = models.Charfield(max_length=100)
def __str__(self):
return self.name
def get_startups(self):
return Startup.objects.filter(category=self)
Мои модели запуска:
class Startup(models.Model):
name = models.CharField(max_length=100)
founder_name = models.CharField(max_length=100)
short_description = models.CharField(max_length=225)
concept = models.TextField(help_text='how does this startup operate?')
category = models.ManyToManyField(Category)
website = models.URLField(max_length=225)
logo = models.ImageField()
def __str__(self):
return self.name
@property
def logo_url(self):
if self.logo and hasattr(self.logo, 'url'):
return self.logo.url
В моемФайл views.py:
class CategoryView(ListView):
template_name = 'myapp/startup-category.html'
context_object_name = 'category_list'
def get_queryset(self):
return Category.objects.all()
class DetailView(DetailView):
model=Category
template_name = 'myapp/startup-list.html'
В моих шаблонах / myapp / startup-category:
{% if category_list %}
<ul>
{% for category in category-list %}
<li><a href="{% url 'detail' category.pk %}">{{category.name}}</a></li>
{% endfor %}
</ul>
{% endif %}
В шаблонах / myapp / startup-list.html:
{% for startup in category.get_startups %}
<tr>
{% if startup.logo %}
<td><img src="{{ startup.logo_url|default_if_none:'#' }}" style="height: 50px; width: 50px;"></td>
{% endif %}
<td>{{startup.name}}</td>
<td> {{startup.short_description}}</td>
<td>
<button type="button" ><a href="">View startup</a>
</button></td>
</tr>
{% endfor %}
В myapp.urls:
from django.urls import path
from . import views as core_views
path('startup_categories/', core_views.CategoryView.as_view(), name='startups'),
path('startup_categories/<int:pk>/', core_views.DetailView.as_view(), name='detail'),
Это отлично работает.Я получаю список категорий;когда я нажимаю на категорию, я перехожу на страницу с подробной информацией, где я получаю список стартапов, связанных с этой категорией, в табличной форме.На каждом элементе автозагрузки есть кнопка, которая ищет подробности запуска.Как мне реализовать просмотр деталей запуска?
Заранее спасибо!