我是Django和Python的新手,并且想尝试以下操作。从一个模型中的数据创建一个下拉列表,然后将数据保存在另一个模型中。但是,每次我呈现表单时,它都是无效的,并且不会显示模板,非常感谢您的帮助。请帮我解决问题。
Models.py:
class Part(models.Model):
category = models.TextField(default = ' ')
def __str__(self):
"""String for representing the Model object."""
return self.category
class UserItem(models.Model):
name= models.CharField(max_length = 50, null=True)
category = models.ForeignKey(Part, on_delete=models.SET_NULL, null=True)
def __str__(self):
"""String for representing the Model object."""
return self.category
Forms.py:
class DropDown(forms.ModelForm):
name = forms.CharField()
parts = forms.ModelChoiceField(queryset=Part.objects.values_list('category', flat=True).distinct())
class Meta:
model = UserItem
fields = ('name', 'category',)
Views.py:
def index(request):
query_results = Part.objects.all()
#part_list = DropDown()
if request.method == 'POST':
form = DropDown(request.POST)
if form.is_valid():
form.save()
return render(request,'index.html', {'query_results': query_results }, {'form': form } )
else:
print("invalid")
print (DropDown.errors)
form = DropDown()
return HttpResponseRedirect(reverse('genre_create') )
答案 0 :(得分:0)
在您的views.py
中,将最后一个return语句更新为以下内容-
return render(request, "index.html",
{'form': form, 'query_results': query_results})
您可以检查here
您实际上可以摆脱else
区块-
def index(request):
query_results = Part.objects.all()
if request.method == 'POST':
form = DropDown(request.POST)
if form.is_valid():
form.save()
return render(request,'index.html', {'query_results': query_results }, {'form': form } )
form = DropDown()
return render(request, "index.html",
{'form': form, 'query_results': query_results})
而且,仅因为您已经在python代码中创建了form
,所以无需为select和其他标签编写html
。您可以在表单呈现选项上引用此link。