问题描述
按照教程创建链接下拉列表。一切正常,但会引发不必要的验证错误。
这是一个基本的 3 字段形式,创建了一个带有姓名、国家和城市的人物对象。
视图.py
from django.shortcuts import render,redirect,get_object_or_404
from .forms import CustomerForm
from .forms import PersonCreationForm
from .models import Person,City
def store(request):
form = CustomerForm()
context = {'form': form}
return render(request,'store/store.html',context)
def cart(request):
form = CustomerForm()
context = {'form': form}
return render (request,'store/cart.html',context)
def checkout(request):
form = CustomerForm()
context = {'form': form}
return render(request,'store/checkout.html',context)
def signup(request):
context = {}
return render(request,'store/signup.html',context)
def home(request):
if request.method == 'POST':
form = CustomerForm(request.POST)
if form.is_valid():
pass # does nothing,just trigger the validation
else:
form = CustomerForm()
return render(request,'shop.html',{'form': form})
def person_create_view(request):
form = PersonCreationForm()
if request.method =='POST':
form = PersonCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('person_add')
return render(request,'store/ho.html',{'form': form})
def person_update_view(request,pk):
person = get_object_or_404(Person,pk = pk)
form = PersonCreationForm(instance = person)
if request.method == 'POST':
form = PersonCreationForm(request.POST,instance=person)
if form.is_valid():
form.save()
return redirect('person_change',pk = pk)
return render(request,{'form': form})
#ajax
def load_cities(request):
country_id = request.GET.get('country_id')
cities = City.objects.filter(country_id = country_id)
return render(request,'store/city_dropdown_list_options.html',{'cities':cities})
Forms.py
from django.forms import ModelForm
from .models import Customer,Person,City
from django import forms
class CustomerForm(ModelForm):
class Meta:
model = Customer
fields = '__all__'
class PersonCreationForm(forms.ModelForm):
class Meta:
model = Person
fields = '__all__'
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['city'].queryset = City.objects.none()
if 'country' in self.data:
try:
country_id = int(self.data.get('country'))
self.fields['city'].queryset = City.objects.filter(country_id = country_id)
except(ValueError,TypeError):
pass
elif self.instance.pk:
self.fields['city'].queryset = self.instance.country.city_set.order_by('name')
在 forms.py 第 14 行,它说-
self.fields['city'].queryset = City.objects.none()
当我尝试提交表单时,此行抛出验证错误。在教程中,他们添加了 if/else 参数,这解决了问题,错误消失了。
就我而言,错误仍然出现。如果我忽略它并重新选择城市并提交,它就可以正常工作。
这几乎就像在那行停顿了一下,然后系统突然意识到还有更多的代码。
我该如何解决这个问题。感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)