Django получить значение через many_to_many
Я пытаюсь сделать сайт. с месяцами и их днями, чтобы после перехода на месяц отображались все его дни в формате ссылок, на которые потом можно перейти Я использую get_absolute_url и get_objects_404. models.py у меня два класса, связаны many_to_many, прописала эту связь в обоих классах
class Month(models.Model):
number_month = models.IntegerField(unique=True)
name_month = models.CharField(max_length=255, unique=True)
count_day = models.IntegerField()
slug = models.SlugField(db_index=True, unique=True)
day = models.ManyToManyField('Day', blank=True, related_name='days')
def get_absolute_url(self):
return reverse('see_month', kwargs={'slug_months': self.slug})
class Day(models.Model):
number_day = models.IntegerField(unique=True)
slug = models.SlugField(unique=True)
is_published = models.BooleanField(default=True)
month = models.ManyToManyField('Month', blank=True, related_name='month')
def get_absolute_url(self):
return reverse('see_day', kwargs={'slug_months': self.month, 'slug_day': self.slug})
в urls.py у меня такой путь для дня
path('month/slug:slug_months/slug:slug_day/', views.see_day, name='see_day')
def see_month(request, slug_months):
month = get_object_or_404(Month, slug=slug_months)
day = month.day.all()
d = {'month': month,
'day': day}
return render(request, 'main_page/month.html', d)
def see_day(request, slug_months, slug_day):
day = get_object_or_404(Day, slug_months, slug_day)
d = {'day': day}
return render(request, 'main_page/day_holiday.html', d)
месяцы у меня отображаются корректно, но при переходе на месяц не отображаются дни, выходит ошибка в month.html такой код
<h1>{{month.name_month}}</h1>
{%for i in day%}
<li><a href="{{ i.get_absolute_url }}">
{{ i.number_day }}</a></li>
{%endfor%}
ошибка выходит вот такая
django.urls.exceptions.NoReverseMatch: Reverse for 'see_day' with keyword arguments '{'slug_months': <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x000001F6A6E7BD60>, 'slug_day': '1'}'
то есть мне нужно получить вместо django.db.models.fields.related_descriptors... имя моего месяца для корректного формирования url адреса, но я не могу понять как мне взять имя моего месяца из self.month в классе Day
Вам нужно получить конкретный объект Month из ManyToMany связи в классе Day. Вы можете сделать это, например, так:
def get_absolute_url(self): month = self.month.first() #Получаем первый объект Month, связанный с этим днем return reverse('see_day', kwargs={'slug_months': month.slug, 'slug_day': self.slug})
Здесь мы используем метод first() для получения первого объекта Month из связи month. Затем мы используем month.slug вместо self.month в reverse функции.
Попробуйте внести этот изменение в свой код и проверьте, поможет ли это решить проблему.