2016-05-13 14 views
0

models.pydjangoでフォームを使用しているモデルのauto increment IDにアクセスする方法は?上記のコードで

class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    address = models.CharField(max_length=50) 
    city = models.CharField(max_length=60) 
    state_province = models.CharField(max_length=30) 
    country = models.CharField(max_length=50) 

    def __unicode__(self): 
     return self.name 


class Author(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 
    email = models.EmailField() 

    def __unicode__(self): 
     return u'%s %s' % (self.first_name, self.last_name) 


class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField(Author, blank=True) 
    publisher = models.ForeignKey(Publisher, blank=True, null=True) 

    def __unicode__(self): 
     return self.title 

forms.py

class Books(forms.ModelForm): 

    class Meta: 
     model = Book 
     fields = ('title', 'authors', 'publisher',) 


class Authors(forms.ModelForm): 
    class Meta: 
     model = Author 
     fields = ('first_name', 'last_name', 'email',) 


class Publishers(forms.ModelForm): 
    class Meta: 
     model = Publisher 
     fields = ("id","name", 'address', 'city', 'state_province', 'country',) 

views.py

def demo(request): 
    form1 = Books(request.POST) 
    form2 = Authors(request.POST) 
    form3 = Publishers(request.POST) 
    if (form1.is_valid() & form2.is_valid() & form3.is_valid()): 
     form3.save() 
     form2.save() 
// Here I want to access id of just saved data of Model Publisher and Model Authors 
     form1.cleaned_data['publisher'] = form3.data['id'] 

    return render(request, 'files/demo.html', {'form1': form1, 'form2': form2, 'form3': form3}) 

私は、単一のビューですべてのモデルのすべてのデータを保存したい。しかしerrroですそのBookモデルはPublisherとのForenignKey関係を持ち、Publisherは保存されたデータのIDを識別する一意のデータを持ちません。だから、私の本当の問題は、どのように私は `

form3.save()とform2.save()

`私は非常に混乱しているを使用してデータが保存されている出版社や著者IDにアクセスできるということです複数のモデルデータを同時に保存し、それらの間のforenignkey関係を処理します。保存

答えて

1

()オブジェクトを返すので、あなただけの

publisher_obj = form3.save() 
author_obj = form2.save() 
book_obj = form1.save(commit=False) 
book_obj.publisher = publisher_obj 
book_obj.save() 
book_obj.authors.add(author_obj) 

を行うと、フォームから「ID」を削除する必要があります。あなたはそれを必要としません。

+0

この多対多リレーションシップを使用する前に、エラー ""にフィールド "book"の値を設定する必要があります。 – Amit

+0

申し訳ありませんが、テストせずにコードを記述するのは難しいですが、 – dkarchmer

関連する問題