Вопрос:

Django - передача экземпляра модели, указанного тегами шаблона, в представление

python django

157 просмотра

2 ответа

333 Репутация автора

На моей HTML-странице у меня есть список агентов (агент - моя пользовательская модель пользователя). Рядом с каждым агентом есть кнопка «Отправить приглашение». Чтобы создать TeamInvitation, мне нужно указать, какой агент подключен к его receiver_agentполю (OneToOneField with Agent).

На странице HTML отображается несколько агентов, и они перечислены в порядке тегов шаблона. Мне нужно что-то вводить после pkat receiver_agent = Agent.objects.get(pk = ???), но я не знаю что вводить.

views.py

class InviteAgentSearchResults(ListView):
    model = Agent
    form_class = AgentSearchForm
    template_name = 'invite_agent_search_results.html'

    def get_queryset(self):
        # ... Code to find correct agent

    def post(self, request, *args, **kwargs):
        invite = TeamInvitation.objects.create(receiver_agent = Agent.objects.get(pk = ???))
        return HttpResponse('Invite successfully sent.')

HTML:

{% for agent in agent_list %}
<div class="agent">
# ... Some code here

        <form method="post">  # The "Send Invite" button
            {% csrf_token %}
            <button class="button1"><span>Send Invite</span></button>
        </form>
</div>
{% endfor %}

РЕДАКТИРОВАТЬ: Для пояснения - отправитель отправляет приглашение только одному агенту . Рядом с каждым агентом есть кнопка «Отправить приглашение». Приглашение, если оно будет принято, добавит агента в команду отправителя.

Мне нужно передать единственного агента, указанного агентом, в {% for agent in agent_list %}мои представления и назначить этого агента в receiver_agentполе. Вы увидите, что есть кнопка для каждого цикла 'агента'; это означает, что каждый агент, отображаемый на странице, имеет кнопку «Отправить приглашение» рядом с ними. Нажатие на кнопку должно только отправить приглашение этому конкретному агенту.

Автор: Valachio Источник Размещён: 08.11.2017 10:42

Ответы (2)


0 плюса

91 Репутация автора

Этот

receiver_agent = Agent.objects.get(pk = ???)

Указывает на получение одного агента с определенным первичным ключом pk

В вашем случае вы хотите получить много. Вы можете использовать функцию фильтра (если вам нужно фильтровать по какому-либо параметру. Или вы можете получить все агенты. Пример обоих ниже.

  1. Фильтр по некоторому параметру agents = Agent.objects.filter(age=25)вернет набор запросов, который вы можете перебрать в своем шаблоне.
  2. Получить все агенты, agents = Agent.objects.all()это также возвращает Queryset.

Подробнее об этом здесь: https://docs.djangoproject.com/en/1.11/topics/db/queries/#retrieving-all-objects

Автор: miketery Размещён: 09.11.2017 12:40

0 плюса

260 Репутация автора

Вы должны отфильтровать операторов, которые входят в команду, для которой вы хотите отправить командное приглашение. Если у вас нет поля, в котором указано, в какой команде находится агент, вы не сможете его отфильтровать.

Создайте только одно командное приглашение:

TeamInvitation.objects.create(team='someteam')

а затем агент фильтрует:

agent = Agent.objects.get(pk=somepk)
teaminv = TeamInvitation.objects.filter(team=agent.team)

Таким образом, вы можете показать агенту, если он был приглашен.

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

Так что вы должны подумать о своей структуре.

Автор: Coder949 Размещён: 09.11.2017 07:31
Вопросы из категории :
32x32