Как исправить проблему с URL лучше django - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть раздел жилых интерьеров на сайте, поэтому типичный URL выглядит следующим образом https://caparolcenterspb.ru/decision/livingrooms/kitchen/provans/ (номер и стиль)

Однако разные комнаты могут иметь одинаковые стили и когда поиск стилей в views.py может привести к выводу нескольких стилей и появлению ошибки

views.py

selected_room = Room.objects.get(slug=rmslg)
 style = Style.objects.get(slug=stslg)

При попытке заменить слаг на разные стили в зависимости от комнаты (например, provans_kitchen), в шаблоне возникает ошибка (просто ставить provans по умолчанию не будет работать)

residentialInteriors. html

{% for room in all_rooms %}
                <li class="menu__item menu__item_interiors"><a href="{% url 'decision:style' rmslg=room.slug stslg='provans' %}">{{ room.name }}</a></li>
                {% endfor %}

У меня есть 2 решения (желательно 2):

  1. либо измените stslg в шаблоне по умолчанию на 'provans_' + str (room. Slug), но эта строка не работает (особенно если учесть, что прованы будут везде)

  2. либо ищите стиль в views.py не только для stslg, но и для rmslg, но для этого в модели стиля необходимо создать поле комнаты, унаследованное от модели комнаты, которая также не работает для r, так как номер объявлен дальше, чем стиль

models.py

class Style(models.Model):
    name = models.CharField(max_length=30)
    full_name = models.CharField(max_length=50)
    slug = models.SlugField()
    img = models.ImageField(upload_to='img/')
    walls = models.TextField()
    floor = models.TextField()
    roof = models.TextField()

    def __str__(self):
        return self.full_name

    class Meta:
        verbose_name = 'Стили'
        verbose_name_plural = 'Стили'

class Room(models.Model):
    name = models.CharField(max_length=30)
    slug = models.SlugField()
    styles = models.ManyToManyField(Style)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Комнаты'
        verbose_name_plural = 'Комнаты'

1 Ответ

0 голосов
/ 27 апреля 2020

Похоже, вы хотите использовать поле отношения, которое у вас уже есть на Room, чтобы найти только стили, связанные с данной комнатой?

selected_room = Room.objects.get(slug=rmslg)
style = selected_room.styles.get(slug=stslg)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...