Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Modelchoicefield保存在数据库django中_Python_Django_Model_Modelchoicefield - Fatal编程技术网

Python Modelchoicefield保存在数据库django中

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

我想创建一个用于管理图书馆的webapp。我创建了图书和类别模型。类别是图书“历史文献”等的类,我想在添加图书时将类别显示为选项。因此我将其放在
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(**)行才能工作

希望这能解决你的问题


你好虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。