2017-02-21 3 views
0

j'ai deux modèles, il y a livre et l'auteur et j'ajouter le champ ManyToMany intérieur modèle livreDjango ManyToMany CreateView Les champs Dans les deux tableaux

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) 

Si je veux créer CreateView des auteurs de livres et d'accès, je peux ajouter du code comme celui-ci

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

mais quelque chose que je veux demander est que je veux créer CreateView du modèle Auteur et ajouter le champ nommé livres à l'intérieur. J'ai essayé de code comme ceci

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

et il montre une erreur « Champ inconnu (s) (livres) spécifiés pour auteur ».

me aider maîtres, je suis nouveau dans django

Merci :)

Répondre

0

Depuis le modèle Author ne dispose pas d'un champ nommé books, vous ne pouvez pas ajouter que dans AuthorCreateView champs.

Ce que vous devez faire est d'abord créer une instance de Author puis de les ajouter en tant qu'auteur dans l'instance books.

Exemple.

book_instance.authors.add(author_instance) 
1

Maintenant, il est résolu en utilisant le formulaire et FormView, ceci est mon code

c'est mon forms.py

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

c'est mon 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 merci @kartikmaji, vous avez sauvé ma journée :)