Python Django从数据库模型创建一个下拉列表并保存到另一个模型中

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

我是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') )

在您的
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引用的是查询结果变量。但在这里,它将转到其他位置,因此不会显示查询结果。为什么我的表格无效?错误消息说您还必须返回查询结果。我已经更新了我的答案。