我有我想通過相互依存ModelChoiceField的過濾,單個汽車模型:如何通過多種形式過濾模型?
class Car(models.Model):
make = models.CharField(max_length=50)
model = models.CharField(max_length=50)
platform = models.CharField(max_length=50)
Forms.py:
class MakeSelectForm(forms.ModelForm):
make = forms.ModelChoiceField(queryset=Car.objects.values_list('make',flat=True).distinct())
class Meta:
model = Car
fields = ["make"]
class ModelSelectForm(forms.ModelForm):
model = forms.ModelChoiceField(queryset=Car.objects.values_list('model',flat=True).distinct())
class Meta:
model = Car
fields = ["make", "model"]
Views.py:
def make_select_view(request):
form = MakeSelectForm()
make = None
if request.method == "POST":
form = MakeSelectForm(request.POST)
if form.is_valid():
make = form.cleaned_data['make']
return render(request, "reviews/makeselect.html", {"form": form, "make": make})
def model_select_view(request, make):
form = ModelSelectForm()
model = None
if request.method == "POST":
form = MakeSelectForm(request.POST)
if form.is_valid():
model = form.cleaned_data['model']
return render(request, "reviews/modelselect.html", {"form": form, "model": model})
網址:
urlpatterns = [
url(r'^$', views.make_select_view, name="make-select"),
url(r'^(?P<make>\w+)/$', views.model_select_view, name="model-select"),
]
Makeselect.html:
<form action="{% url 'reviews:model-select' make %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Select" />
</form>
現在,我必須要通過「做」的第一種形式的說法貼的時候,第二種觀點,然後用它通過與製造汽車的實例進行篩選。但是,我通過的是「無」,並獲得選擇一個有效的選擇。該選擇不是可用選擇之一。第二種形式的錯誤。
任何建議或反饋將受到歡迎,並非常感謝。
謝謝。
您需要通過第二個視圖將您從第一個表單獲得的信息傳遞給第二個表單。我認爲你需要重寫第二種形式的__init__來調整所需字段的查詢集。以下是我當天做的 def __init __(self,* args,** kwargs): self.request = kwargs.pop('request',None) super(GameForm,self).__ init __( * args,** kwargs) if not self.request.user.is_staff: self.fields ['publisher']。queryset = Publisher.objects.filter(id = self.request.user.id) ' –