0

我有两个模型,有 Book 和 Author,我在 Book 模型中添加了 ManyToMany 字段

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)

如果我想从书籍创建 CreateView 并访问作者,我可以添加这样的代码

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

但我想问的是我想从 Author 模型创建 CreateView 并在其中添加名为books的字段。我试着像这样编码

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

它显示错误“为作者指定的未知字段(书籍)”。

帮帮我,我是 django 的新手

谢谢 :)

4

2 回答 2

2

现在,它通过使用 Form 和 FormView 来解决,这是我的代码

这是我的forms.py

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

这是我的意见.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())

顺便说一句,谢谢@kartikmaji,你拯救了我的一天:)

于 2017-02-22T02:09:55.833 回答
2

由于Author模型没有名为 的字段books,因此您不能将其添加到AuthorCreateView字段中。

你应该做的是首先创建一个实例,Author然后将它们作为作者添加到书籍实例中。

例子。

book_instance.authors.add(author_instance)
于 2017-02-21T23:56:53.610 回答