构建 Django 表单时的查询集
queryset when building django form
我试图在加载特定于客户的表单时获取特定的查询集,仅显示该客户的姓名(作为 ID 字段嵌入)、其各自的位置和用户。
这个想法是 select 一个用户和任意数量的多选框位置。
我试图将 ID 作为 kwarg 传递,但收到 KeyError。我试过在网上找到的 kwarg.pop('id') 和同样的问题。有什么建议吗?
forms.py
class LocGroupForm(forms.ModelForm):
class Meta:
model = LocationsGroup
fields = ('group_name', 'slug', 'customer', 'location', 'user_id',)
def __init__(self, *args, **kwargs):
qs = kwargs.pop('id')
super(LocGroupForm, self).__init__(*args, **kwargs)
self.fields['customer'].queryset = Customers.objects.get(pk=qs)
self.fields['location'].queryset = CustomerLocations.objects.filter(customer_id=qs)
self.fields['user_id'].queryset = CustomerUsers.objects.filter(customer_id=qs)
这是我的看法。这只是一个通用视图
views.py
class LocGroupCreate(LoginRequiredMixin, CreateView):
form_class = LocGroupForm
template_name = 'ohnet/a_gen_form.html'
该模板是我用于所有表单的干模板 - 诚然,我主要是从教程中偷来的东西
{% extends "ohnet/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
{% load static %}
<div class="container">
<h1>{{ title }}</h1>
<form method="POST">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" name="submit" value="Submit">
</form>
</div>
{% endblock content %}
这是表单加载的 KeyError。
您需要在构造 LocGroupForm
时为 id
传递一个值,您可以通过重写 get_form_kwargs
:
来实现
class LocGroupCreate(LoginRequiredMixin, CreateView):
form_class = LocGroupForm
template_name = 'ohnet/a_gen_form.html'
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
<strong>kwargs['id'] = …</strong>
return kwargs
您需要填写 …
以指定作为 id
传递给表单的值。例如,这可能是 self.request.user.pk
,或者带有 self.kwargs['<i>name-of-url-parameter[= 的 URL 参数23=]']
我试图在加载特定于客户的表单时获取特定的查询集,仅显示该客户的姓名(作为 ID 字段嵌入)、其各自的位置和用户。
这个想法是 select 一个用户和任意数量的多选框位置。
我试图将 ID 作为 kwarg 传递,但收到 KeyError。我试过在网上找到的 kwarg.pop('id') 和同样的问题。有什么建议吗?
forms.py
class LocGroupForm(forms.ModelForm):
class Meta:
model = LocationsGroup
fields = ('group_name', 'slug', 'customer', 'location', 'user_id',)
def __init__(self, *args, **kwargs):
qs = kwargs.pop('id')
super(LocGroupForm, self).__init__(*args, **kwargs)
self.fields['customer'].queryset = Customers.objects.get(pk=qs)
self.fields['location'].queryset = CustomerLocations.objects.filter(customer_id=qs)
self.fields['user_id'].queryset = CustomerUsers.objects.filter(customer_id=qs)
这是我的看法。这只是一个通用视图
views.py
class LocGroupCreate(LoginRequiredMixin, CreateView):
form_class = LocGroupForm
template_name = 'ohnet/a_gen_form.html'
该模板是我用于所有表单的干模板 - 诚然,我主要是从教程中偷来的东西
{% extends "ohnet/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
{% load static %}
<div class="container">
<h1>{{ title }}</h1>
<form method="POST">
{% csrf_token %}
{{ form|crispy }}
<input type="submit" name="submit" value="Submit">
</form>
</div>
{% endblock content %}
这是表单加载的 KeyError。
您需要在构造 LocGroupForm
时为 id
传递一个值,您可以通过重写 get_form_kwargs
:
class LocGroupCreate(LoginRequiredMixin, CreateView):
form_class = LocGroupForm
template_name = 'ohnet/a_gen_form.html'
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
<strong>kwargs['id'] = …</strong>
return kwargs
您需要填写 …
以指定作为 id
传递给表单的值。例如,这可能是 self.request.user.pk
,或者带有 self.kwargs['<i>name-of-url-parameter[= 的 URL 参数23=]']