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 функции.

Попробуйте внести этот изменение в свой код и проверьте, поможет ли это решить проблему.

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