2010-11-27 9 views
0

Ich habe Buch und ein Kategorie-Modell mit einem ManyToMany Beziehung durch ein anderes ModellWie ändere ich das Widget auf einem ManyToMany Modelform

class Category(models.Model): 
    name = models.CharField(max_length = 255) 

class Book(models.Model): 
    name = models.CharField(max_length = 255) 
    categories = models.ManyToManyField(Category, through='book.BookCategory') 

class BookCategory(models.Model): 
    business = models.ForeignKey(Business) 
    category = models.ForeignKey(Category) 
    user = models.ForeignKey(User) 
    created = models.DateField() 

Dann schauen meine Formulare wie folgt aus:

class BookForm(forms.ModelForm): 
    name = forms.CharField(max_length = 255) 
    categories = forms.ModelMultipleChoiceField(
     widget=forms.CheckboxSelectMultiple, 
     queryset = Category.objects.all() 
    ) 

    class Meta: 
     model = Business 
     fields = ('name', 'categories') 

Als ich versuchen, eine Instanz des Formulars book_form = Buchform (request.POST, instance = Unternehmen) book_form.save()

ich diesen Fehler zu speichern: In einem ManyToManyField, das ein intermediäres Modell angibt, können keine Werte festgelegt werden. Verwenden Sie stattdessen den Book.BookCategory-Manager.

Wie würde ich das lösen?

Antwort

0

Da Sie in BookCategory keine zusätzlichen Felder haben, können Sie das Modell und das through='BookCategory' Argument entfernen. Dann wird ein implizites Modell erstellt, und Sie sollten in der Lage sein, das Widget zu verwenden.

+0

Ich habe eine Menge Zeug entfernt, um es schlanker zu machen, die readl BookCategory hat sowohl einen Benutzer als auch einen erstellt, um zu verfolgen, wer was wann getan hat. Ich habe die Frage bearbeitet, um das zu reflektieren – Joelbitar

Verwandte Themen