我是python的新手,並試圖瞭解如何使動態ModelChoiceField工作。當我選擇一個對象與所有,但我試圖讓下拉反映用戶的屬性時,它工作正常。這裏是我的代碼:無法使動態python ModelChoiceField工作
Forms.py
class ViewByMake(forms.Form):
dropdown = forms.ModelChoiceField(queryset=Make.objects.none())
def __init__(self, user, *args, **kwargs):
user = kwargs.pop('user')
super(ViewByMake, self).__init__(*args, **kwargs)
qs = Make.objects.filter(user=user)
self.fields['dropdown'].queryset = qs
self.fields['dropdown'].widget.attrs['class'] = 'choices1'
self.fields['dropdown'].empty_label = ''
Views.py
def view_bymake(request):
form = ViewByMake(request.POST or None, user=request.user)
if request.method == 'POST':
if form.is_valid():
make = form.cleaned_data['dropdown']
return HttpResponseRedirect(make.get_absolute_url1())
return render(request,'make/view_make.html',{'form':form})
此代碼工作正常,如果我刪除所有用戶=引用,但隨後只返回完整的使對象列表,它不是我想要的。我發現在計算器上一個非常類似的問題,但是當我重複相同的代碼,但它仍然不工作,這是給我下面的錯誤:
初始化()得到了論據「用戶」多個值
我在這個主題上搜索了互聯網的結尾。如果我接近這一點,我很樂意接受其他想法。我試圖基於與用戶配置文件相關的條件來獲取過濾列表。我肯定需要基於配置文件設置的下拉字段是特定於用戶的。感謝您的幫助提前。我正在運行django 1.11.2和Python 3.6.1。
這是更新的模型這就需要包括我不知道,我必須指定用戶屬性:
class Make(models.Model):
name = models.CharField(max_length=264,unique=True)
user = models.ForeignKey(User,null=True,on_delete=models.CASCADE)
你可以在init defionition中刪除用戶參數並重試嗎?我認爲你有兩次用戶在呼叫:首先它會得到用戶= request.Post,然後用戶= request.user –
@NeErAj KuMaR我試過你的建議,我收到以下錯誤:不能解析關鍵字'用戶'到字段。 –
@ ger.s.brett我在發佈之前嘗試過,但又試過並得到無法將關鍵字'user'解析爲字段。 –