Кнопка в базовом шаблоне для переключения между местоположениями

#django #django-views #django-templates

#django #django-просмотры #django-шаблоны

Вопрос:

У меня есть base.html шаблон, который позволяет мне выбирать между магазинами — я хочу использовать этот параметр для сохранения продукта в зависимости от его местоположения.

Я уже внедрил промежуточное программное обеспечение, которое предоставляет мне список всех магазинов для зарегистрированного пользователя и текущего магазина (это разумный способ?):

 from .models import Shop

class ActiveShopMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
    
        shops = Shop.objects.filter(user=request.user.id)
        request.current_shop = shops[0]
        request.shops = shops        
        response = self.get_response(request)
        return response
  

Я создаю товары, используя форму, и я хочу добавить к ней текущую информацию о магазине. Я делаю это, передавая исходные данные в форму:

 def get_initial(self):
    return {"shop": self.request.current_shop.id
  

Я хочу иметь возможность переключаться между магазинами, как на скриншоте:

введите описание изображения здесь

Я попробовал это в базовом шаблоне:

 {% if user.is_authenticated %} 
    {% if request.num_shops > 1 %}
        <div class="dropdown" aria-labelledby="userMenu"> 
            <button class="btn btn-primary dropdown-toggle mr-2" type="button" id="dropdownMenu0" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">shop: {{ request.current_shop }}</button>
                <form method="post" action="">
                    {% csrf_token %}
                    <div class="dropdown-menu" aria-labelledby="dropdownMenu1">
                    {% for shop in request.shops %}
                        <input type="hidden" name="tessst" value="{{ shop.id }}">
                        <a class="dropdown-item" href="/">{{ shop }}</a>
                    {% endfor %}    
                </form>
            </div>
        </div>
{% endif %}  
  

Я хочу получить shop_id переменную в моем представлении индекса:

 def index(request):
    shop_id = request.POST["tessst"]
  

Это правильный подход? Я хотел избежать наличия дополнительного параметра в моих URL-адресах.

Ответ №1:

я думаю, будет лучше, если вы сгенерируете эти данные магазинов в форме. я имею в виду, что вы отправляете эти данные на фронт из класса django fom. например: . вы можете создать пользовательское поле формы, а затем каждая форма генерирует это поле магазина для пользователя. и затем, на ваш взгляд, вы можете обрабатывать эти данные. . также вы можете создать пользовательское поле модели, но это зависит от вашего проекта.

Комментарии:

1. Не уверен, что вы правильно прочитали мой вопрос (или, возможно, я недостаточно четко задал): У меня нет проблем с сохранением магазина в данных (я могу получить текущий активный магазин, позвонив request.current_shop ) — я просто не могу переключаться между магазинами прямо сейчас.

2. вы должны изменить свою кнопку на ввод (например, поле выбора) и переместить ее в элемент «форма»! затем вы можете получить идентификатор магазина после того, как пользователь выберет магазин из списка.