django - 使用 FormView 在 Django 中通过 URL 传递模型字段值
问题描述
我有两种不同的观点共同作用。一个 Formview 和一个 ListView。他们工作正常。
这是我的 HTML:
<form method="GET" autocomplete=off action="{% url 'Book:book_by_name_list' %}">
<div>
{{ form.dropdown }}
</div>
<button type="submit" class="button1">Submit</h3></div></button>
</form>
这是我的表单视图:
class BookByNameView(LoginRequiredMixin,FormView):
form_class = BookByNameForm
template_name = 'book_by_name.html'
def get_form_kwargs(self):
kwargs = super(BookByNameView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
这是我的表格:
class BookByNameForm(forms.Form):
dropdown = forms.ModelChoiceField(queryset=Book.objects.none(),required=False)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
dropdown = kwargs.pop('dropdown', None)
super(BookByNameForm, self).__init__(*args, **kwargs)
self.fields['dropdown'].widget.attrs['class'] = 'choices6'
qs = Book.objects.all()
self.fields['dropdown'].queryset = qs
这是我正在使用的 URL:
url(r'^book_by_name_list/(?P<pk>\d+)/$',views.BookByNameListView.as_view(),name='book_by_name_list'),
当用户点击 form.dropdown、view 并点击 submit 时,book_by_name_list URL 通过以下 ListView 返回:
class BookByNameListView(LoginRequiredMixin,ListView):
model = Book
context_object_name = 'book_list'
template_name = 'book_by_name_list.html'
paginate_by = 15
def get_form_kwargs(self):
kwargs = super(BookByNameListView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def get_context_data(self, **kwargs):
context = super(BookByNameListView, self).get_context_data(**kwargs)
dropdown = self.request.GET.get("dropdown", None)
context['dropdown'] = dropdown
return context
def get_queryset(self):
dropdown = self.request.GET.get("dropdown", None)
user = self.request.user
if dropdown:
queryset = Book.objects.filter(Q(id__exact=dropdown)).distinct()
else:
queryset = Book.objects.none()
return queryset
使用上面的代码,通过 HTML GET 检索下拉列表并返回下拉列表的 ID。我试图弄清楚是否有办法捕获这本书的出版商而不是 ID。根据最终用户选择的书籍,以某种方式获得模型的不同字段。目前我使用的 URL 正在获取本书的 PK 并且正在运行。有没有办法捕获图书的下拉 ID 并返回出版商字段而不是 ID?我不想使用会话,我想弄清楚如何获取 ID,然后使用它来获取发布者。改用 HTML Post 吗?我在不同的视图中做类似的事情,但它在细节视图中,因此更容易在该特定视图中获取属性。我难住了。提前感谢您的任何想法。
解决方案
推荐阅读
- java - 运行 jar 时 webEngine.load() 出现空指针异常
- perl - 我们如何或应该排序“使用 Our::Class qw(may_be some_imports);” 带有 Perl::Tidy 的语句(或没有)?
- javascript - 使用本机 javascript 触发 Shift 选项卡事件
- java - java.lang.RuntimeException: 无法启动活动 ComponentInfo(android.view.InflateException:)
- sumo - 如何使用 TraCi 获取边缘的 id?
- pyspark - 有没有办法使用 pyspark.sql.functions.date_add 和 col('column_name') 作为第二个参数而不是静态整数?
- css - Bootstrap css 在我的 Prestashop 页面上不起作用
- python - 如何在 sqlite 数据库中查找参考键/ID
- solr - 在 Linux 机器上自动创建一些 Solr 内核
- git - 将多个 svn diff 合并为一个大文件