我有一个模型,我将其转换为如下形式
models.py
class Book(models.Model):
name = models.CharField()
description = models.TextField()
class College(models.Model):
name = models.CharField()
books = models.ManyToManyField(Book)
place = models.CharField()
form.py
from django.forms import ModelForm
from myapp.models import College
class CollegeForm(ModelForm):
class Meta:
model = College
views.py
def college_view(request):
form = CollegeForm()
if request.method == 'POST':
form = CollegeForm(request.POST):
if form.is_valid():
college_obj = College.objects.create(name=request.POST['name'],
place=request.POST['place'],
books= ???????)
return HttpResponseRedirect(reverse('index'))
return render_to_response('college-detail.html', {'form':form})
所以我上面所做的就是
创建了一个名为College
的模型,该模型具有many to many
的{{1}}链接
使用Book
将模型转换为表单并呈现为html
当表单提交了值时,在视图中我从中获取值
request.POST并尝试保存到ModelForm
模型。
但是你可以观察到大学形式有一个College
字段和两个many to many
,
所以我已经将char字段直接保存到表中,但是我被困在保存附近
表格中的多对多字段CharField
(即模型books
)
所以任何人都可以让我知道如何将College
字段保存到数据库表中我是指具有manytomany
字段的模型
提前致谢.....
答案 0 :(得分:0)
因此,如果您阅读ModelForms上的文档,您会发现它们配备了save()方法,该方法已经提供了您想要的功能。
您可以使用
if form.is_valid():
form.save()
或者,如果您想为模型添加更多值,可以
if form.is_valid():
instance = form.save(commit=False)
instance.custom_field = custom_value
instance.save()
答案 1 :(得分:0)
在调用form.is_valid()
之后,调用form.save()
也会为您节省很多数据。如果要在保存之前更改/添加数据以形成对象,则可以
f = form.save(commit=False)
使用commit=False
调用save之后,django在表单对象上提供了save_m2m()
方法。注意 form 而不是 f 。处理完 f 对象后,可以继续调用save_m2m()
来保存该形式的许多数据。
form.save_m2m()
参考:https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#the-save-method