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

时间:2020-03-05 10:39:53

标签: python django dropdown

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

1 个答案:

答案 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

相关问题