【问题标题】:How to pass post request data to a separate view? (Django)如何将发布请求数据传递到单独的视图? (姜戈)
【发布时间】:2019-01-24 17:08:43
【问题描述】:

我目前有这个视图,它将流派列表发送到模板以填充下拉框:

class GenreSearch(generic.ListView):
    template_name = 'games/genresearch.html'
    context_object_name = 'genre_list'

    def get_queryset(self):
        return Genre.objects.order_by("name")

这是模板:

{% if genre_list %}

<div class="btn-group">
  <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Select Genre</button>
  <div class="dropdown-menu scrollable-menu">
      {% for genre in genre_list %}
        <a class="dropdown-item" href="#">{{ genre.name }}</a>
      {% endfor %}
  </div>
</div>

{% endif %}

我现在要做的是从这个下拉框中选择一个流派,提交它,然后使用这个视图根据提交的流派返回结果:

class GamesPageByGenre(generic.ListView):
    template_name = 'games/allgames.html'
    context_object_name = 'game_list'

    def get_queryset(self):
        #Return games whose genres include the genre id x
        return Game.objects.filter(genres__id=10)

因此,如果从下拉框中选择了“动作”类型,请提交此内容,获取类型动作的 ID,然后替换 genres__id=10genres__id=genreID

【问题讨论】:

  • 好吧,您定义了一个&lt;form&gt;,该表单的action=... 应该重定向到{% url ... %},即处理该表单的视图的URL 名称,然后您获取数据通过self.request.POST['my_fieldname'],虽然为了搜索,有时会使用GET请求(带GET参数)。

标签: python django django-forms django-templates django-views


【解决方案1】:

在下拉列表中传递 url:

<a class="dropdown-item" href="/gamespagebygenre/?genre={{ genre.id }}">{{ genre.name }}</a>

并在视图中像这样:

def get_queryset(self):

    genre_id = self.request.GET.get("genre")
    return Game.objects.filter(genres__id=int(genre_id))

【讨论】:

  • 当我这样做时,我收到了这个错误:TypeError at /genre-results/5/ int() argument must be a string, a bytes-like object or a number, not 'NoneType'。在不同的视图中调用 genre_id = self.request.GET.get("genre") 是否意味着它没有正确接收它或者它是不同的事情?
  • 我只是修复了抱歉,你必须把 ?在 url 上的参数之前
  • 在这个查询中是否可以发送多个数据?例如,?genre={{ genre.id }}"&gt;{{ genre.name }}/?userid={{user.id}}?
  • 我在上面找到了我的查询,在?userid 工作之前使用&amp; 而不是/
猜你喜欢
  • 2017-12-13
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2019-03-25
  • 1970-01-01
相关资源
最近更新 更多