gpt4 book ai didi

python - Django:基于调用 View 的 pk forms.ModelChoiceField

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:57 25 4
gpt4 key购买 nike

我正在寻找一种通过调用 View 的pk 过滤forms.ModelChoiceField() 内容的方法。

我有一个基于类的 View :

class StorageItemMergeView(FormView):
form_class = MergeStorageItemsForm
#....

它使用MergeStorageItemsForm,当前定义为:

class MergeStorageItemsForm(forms.Form):
storageitem1 = forms.ModelChoiceField(queryset=StorageItem.objects.get(pk=self.kwargs["pk"]))

StorageItemMergeView 连接到一个对象,因此我只想提供也已连接的对象。我尝试将 kwargs 放入几种变体中的定义中,例如

storageitem1 = forms.ModelChoiceField(queryset=StorageItem.objects.get(pk=self.kwargs["pk"]))

kwargs 似乎没有在这种情况下定义。

我还发现,可以在 modelForm 上重新定义 __init__() 来完成类似的事情

def __init__(self, user=None, **kwargs):
super(MergeStorageItemsForm, self).__init__(**kwargs)
#...

这并没有达到目的。如何根据调用相应 View 的请求和/或对象来过滤表单提供的选项?

我的 urls.py 的相应部分看起来像这样

url(r'^storageitem/(?P<pk>[\w]+)/merge/$', login_required(
StorageItemMergeView.as_view()), name='storage_item_merge'),

最佳答案

您必须在 __init__ 方法中执行此操作,如下所示:

class MergeStorageItemsForm(forms.Form):
storageitem1 = forms.ModelChoiceField(queryset=StorageItem.objects.none())

def __init__(self, *args, **kwargs):
self.storage_pk = kwargs.pop('pk')
super(MergeStorageItemsForm, self).__init__(*args, **kwargs)
self.fileds['storageitem1'].queryset = StorageItem.objects.get(pk=self.storage_pk)

关于python - Django:基于调用 View 的 pk forms.ModelChoiceField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615972/

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