python - ModelForm 中的 Django 查询集使用 'pk'

标签 python django python-3.x django-forms

我正在尝试关注this SO Q&A 这正是我想要做的,但是使用 pk 而不是固定 key 。我的文件...

View .py

class JuryCreate(CreateView):
    model = Jury
    form_class = JuryCreateForm

    def form_valid(self, form):
        form.instance.customer_id = self.kwargs['pk']
        form.instance.court_year_id = self.kwargs['yr']
        return super().form_valid(form)

表单.py

class JuryCreateForm(ModelForm):

    class Meta:
        model = Jury
        fields = [
            'parent_jury',
            #Other Fields
            ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['parent_jury'].queryset = Jury.objects.filter(
            customer_id = self.kwargs['pk']).filter(
            court_year_id = self.kwargs['yr'])

如果我直接从 View 转到模板,我就可以访问查询集(它提供了一个查询集对象)。但是,如果我检查 ModelForm,它会抛出一个 AttributeError: 'JuryCreateForm' object has no attribute 'kwargs'。基本上,我相信请求没有传递到 ModelForm,因此它无法访问 kwargs。如何将主键放入 ModelForm 中以填充字段?

我还尝试了 get_form_kwargs 方法的变体,我认为这是将这些方法传递给 ModelForm 的适当机制 - 我只是无法让它正确实现(或使其正确)类对象)。

最佳答案

尝试重写 View 的 get_form_kwargs 方法,如下所示:

class JuryCreate(CreateView):
    model = Jury
    form_class = JuryCreateForm

    def form_valid(self, form):
        form.instance.customer_id = self.kwargs['pk']
        form.instance.court_year_id = self.kwargs['yr']
        return super().form_valid(form)

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['pk'] = self.kwargs['pk']
        kwargs['yr'] = self.kwargs['yr']
        return kwargs

在表单 init 中使用 kwargs['pk']kwargs.pop('pk') 访问 pk 值:

def __init__(self, *args, **kwargs):
    pk = kwargs.pop('pk')
    yr = kwargs.pop('yr') 
    super().__init__(*args, **kwargs)
    self.fields['parent_jury'].queryset = Jury.objects.filter(
        customer_id = pk).filter(
        court_year_id = yr)

关于python - ModelForm 中的 Django 查询集使用 'pk',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50691066/

相关文章:

python - 语法错误 : invalid syntax with variable annotation

python - 关于scipy.signal中savgol_filter函数参数的一些疑问

django - 即使密码正确,check_password 总是返回 false?

django - 如何禁用 Django 的无效 HTTP_HOST 错误?

python - 一个 for 循环中的多个 findAll

python-3.x - 您知道如何在 Databricks 集群上安装 'ODBC Driver 17 for SQL Server' 吗?

python - 将函数传递给具有不同数量变量的函数

python - python scikit 中更快的数据拟合(或学习)功能

python - 将数据框列转换为数组

python - 关于 Django 在 urlpattern 中的 pk