构建 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=]']