Python Modelchoicefield保存在数据库django中
我想创建一个用于管理图书馆的webapp。我创建了图书和类别模型。类别是图书“历史文献”等的类,我想在添加图书时将类别显示为选项。因此我将其放在Python Modelchoicefield保存在数据库django中,python,django,model,modelchoicefield,Python,Django,Model,Modelchoicefield,我想创建一个用于管理图书馆的webapp。我创建了图书和类别模型。类别是图书“历史文献”等的类,我想在添加图书时将类别显示为选项。因此我将其放在modelcoocefield中,但当我尝试在数据库中保存modelcoocefield的值时,事实并非如此 这是代码 型号.py from django.db import models # Create your models here. class Category(models.Model): name = models.CharFie
modelcoocefield
中,但当我尝试在数据库中保存modelcoocefield
的值时,事实并非如此
这是代码
型号.py
from django.db import models
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=100)
class Livre(models.Model):
titre = models.CharField(max_length=30,null=True)
category=models.CharField(max_length=30,null=True)
num_category=models.ForeignKey(Category, on_delete=models.CASCADE,null=True)
auteur=models.CharField(max_length=30,null=True)
nombre_copie=models.IntegerField(default=0,null=True)
publisher=models.CharField(max_length=30,null=True)
from django import forms
from . import models
from project.models import Category
class Ajouterlivre(forms.Form):
titre = forms.CharField(max_length=100)
category = forms.ModelChoiceField(queryset=Category.objects.values_list('name', flat=True))
auteur = forms.CharField(max_length=100)
nombre_copie = forms.IntegerField()
publisher = forms.CharField(max_length=100)
def Ajoutlivre(request):
if request.method== 'POST':
form=forms.Ajouterlivre(request.POST)
if form.is_valid():
objt=Livre()
objt.titre = form.cleaned_data['titre']
objt.category= form.cleaned_data['category']
objt.auteur = form.cleaned_data['auteur']
objt.nombre_copie = form.cleaned_data['nombre_copie']
objt.publisher = form.cleaned_data['publisher']
objt.save()
return redirect('home')
else:
form=forms.Ajouterlivre()
return render(request,'livre/ajout-livre.html',{'form':form})
forms.py
from django.db import models
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=100)
class Livre(models.Model):
titre = models.CharField(max_length=30,null=True)
category=models.CharField(max_length=30,null=True)
num_category=models.ForeignKey(Category, on_delete=models.CASCADE,null=True)
auteur=models.CharField(max_length=30,null=True)
nombre_copie=models.IntegerField(default=0,null=True)
publisher=models.CharField(max_length=30,null=True)
from django import forms
from . import models
from project.models import Category
class Ajouterlivre(forms.Form):
titre = forms.CharField(max_length=100)
category = forms.ModelChoiceField(queryset=Category.objects.values_list('name', flat=True))
auteur = forms.CharField(max_length=100)
nombre_copie = forms.IntegerField()
publisher = forms.CharField(max_length=100)
def Ajoutlivre(request):
if request.method== 'POST':
form=forms.Ajouterlivre(request.POST)
if form.is_valid():
objt=Livre()
objt.titre = form.cleaned_data['titre']
objt.category= form.cleaned_data['category']
objt.auteur = form.cleaned_data['auteur']
objt.nombre_copie = form.cleaned_data['nombre_copie']
objt.publisher = form.cleaned_data['publisher']
objt.save()
return redirect('home')
else:
form=forms.Ajouterlivre()
return render(request,'livre/ajout-livre.html',{'form':form})
视图.py
from django.db import models
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=100)
class Livre(models.Model):
titre = models.CharField(max_length=30,null=True)
category=models.CharField(max_length=30,null=True)
num_category=models.ForeignKey(Category, on_delete=models.CASCADE,null=True)
auteur=models.CharField(max_length=30,null=True)
nombre_copie=models.IntegerField(default=0,null=True)
publisher=models.CharField(max_length=30,null=True)
from django import forms
from . import models
from project.models import Category
class Ajouterlivre(forms.Form):
titre = forms.CharField(max_length=100)
category = forms.ModelChoiceField(queryset=Category.objects.values_list('name', flat=True))
auteur = forms.CharField(max_length=100)
nombre_copie = forms.IntegerField()
publisher = forms.CharField(max_length=100)
def Ajoutlivre(request):
if request.method== 'POST':
form=forms.Ajouterlivre(request.POST)
if form.is_valid():
objt=Livre()
objt.titre = form.cleaned_data['titre']
objt.category= form.cleaned_data['category']
objt.auteur = form.cleaned_data['auteur']
objt.nombre_copie = form.cleaned_data['nombre_copie']
objt.publisher = form.cleaned_data['publisher']
objt.save()
return redirect('home')
else:
form=forms.Ajouterlivre()
return render(request,'livre/ajout-livre.html',{'form':form})
ModelchoiceField要求queryset返回字典,而不是元组,当您使用值\列表时,它返回元组。
因此,您必须更改代码中的category(**)行才能工作
希望这能解决你的问题
你好虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。