使用两个表将数据插入数据库

时间:2013-03-26 10:03:17

标签: django django-models django-forms django-views

在我的views.py

def addinfo(request):
    profile_form = ProfileForm()
    book_form = BookForm(instance=Profile())

    if request.POST:

        profile_form=ProfileForm(request.POST)

        if profile_form.is_valid():
            profile=Profile_form.save()

            book_form=BookForm(request.POST,instance=profile)

            if book_form.is_valid():
                book_form.save()

models.py是

class Profile(models.Model):
    profile_id = models.AutoField(primary_key=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()
    age=models.IntegerField()

    class Meta:
    db_table=u'Profile'

    def __unicode__(self):
        return u"%d %s %s %s %d" % (self.pk, self.first_name, self.last_name, self.email,self.age)



class Book(models.Model):
    book_id=models.AutoField(primary_key=True,unique=True)
    book_name=models.CharField(max_length=30)
    publisher_name=models.CharField(max_length=40)
    profile=models.ForeignKey(Author)

    class Meta:
        db_table = u'Book'

    def __unicode__(self):
        return u'%d %s %s' % (self.pk, self.book_name, self.publisher_name)

这是为了将数据保存到两个不同的模型中,我在此使用表单。一个模型得到更新,另一个表数据没有被插入。没有保存页面得到刷新。什么是问题。

2 个答案:

答案 0 :(得分:2)

如果我明白你要做什么,你应该替换

book_form=BookForm(request.POST,instance=profile)

book = Book(profile_id=profile.id)  
# EDIT shameless copy and paste from Catherine's answer to avoid "profile_id not defined" error
book_form=BookForm(request.POST,instance=book)
if book_form.is_valid():
    book_form.save()

<小时/> 的修改: 作为替代方案,您可以更改Book模型以使实例可选:

profile=models.ForeignKey(Author, null=True)
以这种方式,您的视图将变为:

def addinfo(request):
    profile_form = ProfileForm()
    book_form = BookForm()

    if request.POST:
        profile_form=ProfileForm(request.POST)
        if profile_form.is_valid():
            profile=Profile_form.save()
            book_form=BookForm(request.POST)
            if book_form.is_valid():
               book = book_form.save(commit=False)
               book.profile = profile
               book.save()

请参阅this paragraph中的说明,了解commit=False部分

的说明

答案 1 :(得分:1)

def addinfo(request):
    profile_form = ProfileForm()
    book_form = BookForm(instance=Profile())

    if request.POST:
        profile_form=ProfileForm(request.POST)
        if profile_form.is_valid():
            profile=Profile_form.save()

            book = Book(profile_id=profile.id)
            book_form=BookForm(request.POST,instance=book)
            if book_form.is_valid():
                book_form.save()