0

我有一个模型,我将其转换为如下形式

模型.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()

表格.py

from django.forms import ModelForm
from myapp.models import College

class CollegeForm(ModelForm):

    class Meta:
        model = College

视图.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})

所以我上面所做的就是

  1. 创建了一个名为的模型,该模型College具有many to many指向Book

  2. 使用 html 将模型转换为表单ModelForm并呈现为 html

  3. 当表单与值一起提交时,鉴于我从
    request.POST 获取该值并尝试保存到College模型中。

    但是您可以观察到大学表格有一个many to many字段和两个字段CharField,所以我已将 char 字段直接保存到表中,但我被困在表中保存多对多字段books(即模型College

所以任何人都可以简单地告诉我如何将manytomany字段保存到数据库表中我的意思是具有manytomany字段的模型

提前致谢.....

4

2 回答 2

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()
于 2013-07-23T12:34:46.223 回答
0

调用后form.is_valid(),调用form.save()也会为您保存多对多数据。如果您想在保存之前更改/添加数据以形成对象,您可以这样做

f = form.save(commit=False)

commit=False使用django调用 save 后,可以save_m2m()在表单对象上使用一个方法。通知不是f。完成对f对象的操作后,您可以继续调用save_m2m()以保存该表单的多对多数据。

form.save_m2m() 

参考:https ://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#the-save-method

于 2018-07-18T15:12:16.103 回答