【问题标题】:queryset when building django form构建 Django 表单时的查询集
【发布时间】:2021-09-28 02:52:56
【问题描述】:

我正在尝试根据加载客户特定表单时获取特定查询集,仅显示该客户的姓名(嵌入为 ID 字段)、其各自的位置和用户。

这个想法是从多选框中选择一个用户和任意数量的位置。

我尝试将 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参数...
  • 但 ID 在调用页面的参数中。这是客户 ID。
  • 你能分享你得到这个错误的视图吗...? edit问题。
  • 我已经更新了帖子

标签: django django-models django-views django-forms django-queryset


【解决方案1】:

您需要在构造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()
        kwargs['id'] = …
        return kwargs

您需要填写,指定作为id 传递给表单的值。例如,这可能是 self.request.user.pk,或带有 self.kwargs['<i>name-of-url-parameter</i>'] 的 URL 参数

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-05-15
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
相关资源
最近更新 更多