gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:41 25 4
gpt4 key购买 nike

我正在尝试关注 this所以问答这正是我想做的,但使用 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

在 form 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com