Django выпадающий список зависит от модели? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь сделать выпадающий список зависимым от модели. Например, мое приложение имеет организационную модель, когда для пользователя создается организация. Организации могут иметь магазины. Когда вошедший в систему пользователь получает доступ к этому выпадающему списку, я хочу перечислить все хранилища, связанные с организацией, на которую настроен пользователь. Каков наилучший способ сделать это?

models.py


class Org(models.Model):

  name = models.CharField(blank=True, max_length=100)
  client_id = models.IntegerField()
  default_store = models.OneToOneField('Store',
    on_delete=models.SET_NULL,
    null=True,blank=True,
    related_name='+')

  def __str__(self):
    return self.name

class Store(models.Model):

  name = models.CharField(blank=True, max_length=100)
  org = models.ForeignKey('Org', on_delete=models.CASCADE)
  store_id = models.IntegerField(null=True, blank=True)

  def __str__(self):
    return self.name


class Profile(models.Model):
  user = models.OneToOneField(User, on_delete=models.CASCADE)
  org = models.ForeignKey('Org', 
    on_delete=models.SET_NULL,
    null=True, blank=True)

  def __str__(self):
    return self.user.username

@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
  if created:
    Profile.objects.create(user=instance)
  instance.profile.save()

Я хотел бы использовать этот раскрывающийся список как часть навигационной панели bootstrap, где у меня есть другие раскрывающиеся списки (связанные). Вот раздел навигационного штрих-кода, где я бы хотел его использовать. Я знаю, что он не подходит точно так, как у меня ниже, но это пример того, как я делаю другой выпадающий список

            <div class="btn-group">
              <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                Reports
              </button>
              <div class="dropdown-menu">
                <a class="dropdown-item" href="{% url 'something' %}">Store_a1</a>
                <a class="dropdown-item" href="{% url 'something' %}">Store_a2</a>
                <a class="dropdown-item" href="{% url 'something' %}">Store_a3</a>

              </div>
            </div>

Страница загружает URL-адрес iframe, где store_id передается как Параметр запроса в настоящее время передается store_id из "default_store". Я думаю, мне нужна переменная для чего-то вроде "selected_store" или что-то одно эти строки? Когда пользователь щелкает одно из хранилищ в раскрывающемся списке, я бы хотел, чтобы store_id выбранного хранилища передавался параметру запроса в URL-адресе iframe и обновлял sh страницу.

Спасибо

1 Ответ

1 голос
/ 30 марта 2020

В зависимости от ваших моделей вы можете сделать что-то подобное в своем шаблоне до l oop во всех магазинах для пользователя

{% for store in request.user.profile.org.store_set.all %}
    <a class="dropdown-item" href="{% url 'something' store_id=store.id %}">{{ store }}</a>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...