Django - 将模板标签指定的模型实例传递给视图

时间:2017-11-08 22:42:28

标签: python django

在我的HTML页面上,我有一个代理列表(代理是我的自定义用户模型)。在每个代理旁边都是“发送邀请”。按钮。要创建TeamInvitation,我需要指定哪个代理附加到其receiver_agent字段(带代理的OneToOneField)。

HTML页面上显示多个代理,它们按模板标记的顺序列出。我需要在pk 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 %}

编辑:澄清 - 发件人只向一个代理发送邀请。有一个&#39;发送邀请&#39;每个代理旁边的按钮。邀请被接受后,会将代理添加到发件人的团队中。

我需要将{% for agent in agent_list %}中的代理指定的单一代理传递到我的视图中,并将该代理分配给receiver_agent字段。您会看到每个代理商都有一个按钮&#39;环;意味着页面上显示的每个代理都有一个发送邀请&#39;他们旁边的按钮。按下按钮只应向该特定代理发送邀请。

2 个答案:

答案 0 :(得分:0)

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

指定获取具有特定主键pk

的单个代理

在你的情况下,你希望得到很多。您可以使用过滤功能(如果您需要按某些参数进行过滤。或者您可以获取所有代理。下面的示例。

  1. 按某些参数agents = Agent.objects.filter(age=25)过滤,这将返回一个您可以在模板中迭代的Queryset。
  2. 获取所有代理agents = Agent.objects.all()这也会返回一个Queryset。
  3. 有关此内容的更多信息:https://docs.djangoproject.com/en/1.11/topics/db/queries/#retrieving-all-objects

答案 1 :(得分:0)

您必须过滤要发送团队邀请的团队中的代理。如果您没有显示代理所在团队的字段,则无法对其进行过滤。

只创建一个团队邀请:

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

然后代理过滤器:

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

通过这种方式,您可以在邀请时显示代理。

但我不知道您为何要为每个座席创建团队邀请。团队邀请只应创建一次,代理会检查他是否被邀请。通常情况下,您会邀请球队参赛,团队中的每个人都会收到邀请。我希望很清楚我的意思。

所以你应该考虑一下你的结构。