我有我想通过相互依存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) ' –