2017-02-21 16 views
0

は、私は2つのモデルがあり、書籍や著者があると私は本やアクセス著者からCREATEVIEWを作成したい場合、私はちょうど私ができる、ブックモデル両方のテーブルにDjangoの多対多CREATEVIEWフィールド

class Author(models.Model): 
    name = models.CharField(verbose_name='name', max_length=50) 
    created_at = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return unicode(self.name)  

class Book(models.Model): 
    title = models.CharField(verbose_name='title', max_length=50) 
    authors = models.ManyToManyField(Author) # Many to many 
    created_at = models.DateTimeField(auto_now_add=True)  

    def __unicode__(self): 
     return unicode(self.title) 

内の多対多のフィールドを追加します

class BookCreateView(CreateView): 
    model = Book 
    template_name = "books/book_create.html" 
    fields = ['title', 'authors'] 

次のようなコードを追加しますが、私はお願いしたいものは、私がAuthorモデルからCREATEVIEWを作成し、 ブックその中をという名前のフィールドを追加したいです。私はこの

class AuthorCreateView(CreateView): 
    model = Author 
    template_name = "books/author_create.html" 
    fields = ['name', 'books'] 

のようにコーディングしようとしましたが、それはエラー「未知のフィールド(複数可)(図書)著者に指定さ」を示しています。

することは私に主人を助け、私はジャンゴで

感謝:)

答えて

0

Authorモデルはbooksという名前のフィールドを持っていないので、あなたはAuthorCreateViewフィールドにそれを追加することはできません新たなんです。

まず、Authorのインスタンスを作成し、書籍のインスタンスで著者として追加します。

例。

book_instance.authors.add(author_instance) 
1

さて、それはフォームやFormViewコントロールを使用することによって解決され、これはこれは私のforms.py

class AuthorForm(Form): 
    name = forms.CharField() 
    books = forms.ModelMultipleChoiceField(Book.objects.all()) 

である私のコード

である、これは私のviews.pyある

class AuthorCreateView(FormView): 
    template_name = "books/author_create.html" 
    form_class = AuthorForm 

    def form_valid(self, form): 
     name = form.cleaned_data['name'] 
     books = form.cleaned_data['books'] 

     author = Author(name=name) 
     author.save() 
     book_list = Book.objects.filter(pk__in=books) 
     for book in book_list: 
      author.book_set.add(book) 

     return HttpResponse(author.book_set.all()) 

btwありがとう@kartikmaji、あなたは私の一日を保存しました:)

関連する問題