如何从 Django 中的 ModelChoiceField 检索对象 ID
How to retrieve object id from ModelChoiceField in Django
这可能是非常简单的解决方案,但我自己想不出来。所以,基本上我有经典的数据库模型,包括书籍、作者和出版商。我唯一的问题是第一本书。要添加我正在使用 ModelChoiceField 选择 Publisher 的书。但是在尝试保存此表单后,我仍然收到 "Column 'publisher_id' cannot be null" 的错误。选择字段仅显示出版商名称,我不知道如何获取该出版商的 ID 以将其作为出版商 ID 添加到本书中。如果有任何帮助,我将不胜感激。
models.py:
class Author(models.Model):
firstName = models.CharField(max_length=20)
lastName = models.CharField(max_length=30)
def __unicode__(self):
return u'%s %s' % (self.firstName, self.lastName)
class Publisher(models.Model):
name = models.CharField(max_length=100)
year = models.DateField()
def __unicode__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=80)
publishYear = models.DateField()
isbnNumber = models.DecimalField(max_digits=13, decimal_places=0)
author = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
forms.py:
class BookForm(forms.ModelForm):
author = forms.ModelChoiceField(queryset = Author.objects.all())
publisher = forms.ModelChoiceField(queryset=Publisher.objects.all())
class Meta:
model = Book
fields = ['title', 'isbnNumber', 'publishYear']
view.py:
def book_add(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = BookForm()
return render(request, 'book_add.html', {'form': form}, context_instance=RequestContext(request))
author
是多对多,所以需要用ModelMultipleChoiceField
.
但是我不知道您为什么首先要重新定义这些字段。 ModelChoiceField 已经是外键字段的默认值。删除这两个定义,并将 author
和 publisher
添加到 fields
列表中。
这可能是非常简单的解决方案,但我自己想不出来。所以,基本上我有经典的数据库模型,包括书籍、作者和出版商。我唯一的问题是第一本书。要添加我正在使用 ModelChoiceField 选择 Publisher 的书。但是在尝试保存此表单后,我仍然收到 "Column 'publisher_id' cannot be null" 的错误。选择字段仅显示出版商名称,我不知道如何获取该出版商的 ID 以将其作为出版商 ID 添加到本书中。如果有任何帮助,我将不胜感激。
models.py:
class Author(models.Model):
firstName = models.CharField(max_length=20)
lastName = models.CharField(max_length=30)
def __unicode__(self):
return u'%s %s' % (self.firstName, self.lastName)
class Publisher(models.Model):
name = models.CharField(max_length=100)
year = models.DateField()
def __unicode__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=80)
publishYear = models.DateField()
isbnNumber = models.DecimalField(max_digits=13, decimal_places=0)
author = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
forms.py:
class BookForm(forms.ModelForm):
author = forms.ModelChoiceField(queryset = Author.objects.all())
publisher = forms.ModelChoiceField(queryset=Publisher.objects.all())
class Meta:
model = Book
fields = ['title', 'isbnNumber', 'publishYear']
view.py:
def book_add(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = BookForm()
return render(request, 'book_add.html', {'form': form}, context_instance=RequestContext(request))
author
是多对多,所以需要用ModelMultipleChoiceField
.
但是我不知道您为什么首先要重新定义这些字段。 ModelChoiceField 已经是外键字段的默认值。删除这两个定义,并将 author
和 publisher
添加到 fields
列表中。