#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. вы должны изменить свою кнопку на ввод (например, поле выбора) и переместить ее в элемент «форма»! затем вы можете получить идентификатор магазина после того, как пользователь выберет магазин из списка.