Python Django从数据库模型创建一个下拉列表并保存到另一个模型中
我是Django和Python新手,希望尝试以下内容。从模型中的数据创建下拉列表,并将数据保存到另一个模型中。但是,每次我呈现表单时,它都是无效的,并且不显示模板,任何帮助都将不胜感激。请帮我找出哪里出了问题 Models.py:Python Django从数据库模型创建一个下拉列表并保存到另一个模型中,python,django,dropdown,Python,Django,Dropdown,我是Django和Python新手,希望尝试以下内容。从模型中的数据创建下拉列表,并将数据保存到另一个模型中。但是,每次我呈现表单时,它都是无效的,并且不显示模板,任何帮助都将不胜感激。请帮我找出哪里出了问题 Models.py: class Part(models.Model): category = models.TextField(default = ' ') def __str__(self): """String for representing th
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') )
在您的
views.py
中,将最后一条return语句更新到下面-
return render(request, "index.html",
{'form': form, 'query_results': query_results})
你可以查一下
实际上,您可以去掉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
s。您可以在表单呈现选项中引用此项。您的表单方法是POST
?对于GET
请求,您不会返回任何表单。@MKPatel:是的,我的表单方法是POST。让我发布我的模板:{%block content%}{%csrf_token%}名称:类别:{%for查询结果中的项%}{{{item.Category}}{%endfor%}{%endblock%}@Ejaz:请你指出同样的问题,因为我在这里看不到任何get。@Ezaz:我使用了下面的代码来引用下拉列表:{%for查询结果中的项%}{{item.category}{%endfor%},那么如果我只传递表单,我应该如何引用下拉列表?有什么办法吗?在上面的代码中,如果请求不是
POST
,那么您只是重定向表单,而不是返回表单。您必须使用我的返回语句进行更新。我已根据您的评论进行了更改。现在将显示模板,但下拉列表中不包含任何数据。类别下拉列表为空。但是,包含类别列的零件表包含数据。我哪里出错了?我的html引用的是查询结果变量。但在这里,它将转到其他位置,因此不会显示查询结果。为什么我的表格无效?错误消息说您还必须返回查询结果。我已经更新了我的答案。