2010-12-02 5 views
3

ich ein Profilobjekt mit ManyToMany Beziehung zu Kategorie habedjango ModelMultipleChoiceField queryset/Filter für Objekte, die bereits im Zusammenhang


class Profile(models.Model): 
    . . . 
    category = models.ManyToManyField(Category, blank=True) 

In meiner Form, ich möchte nur an den mit dem Profil Der Code zugeordnet Kategorien ein Kontrollkästchen angezeigt werden Unten werden alle Kategorien angezeigt.


class ProfileForm(ModelForm): 
    . . . 
    category = forms.ModelMultipleChoiceField(Category.objects.all(), 
        widget=forms.CheckboxSelectMultiple()) 

Wie schreibe ich ein Abfrage-Set, so dass ich nur die Kategorien anzeigen, die dem Profil zugeordnet sind? Ich habe Variationen dieses:


    category = forms.ModelMultipleChoiceField(Category.objects.filter(id__in=Profile.category.all()), widget=forms.CheckboxSelectMultiple()) 

Hat diese Fehlermeldung: ‚ReverseManyRelatedObjectsDescriptor‘ Objekt hat kein Attribut ‚alle‘

+0

Nevermind: Ich muss das Abfrage-Set in der Ansicht definieren. I gues sit hat mit Laufzeitvariable zu tun form.fields ["Kategorie"]. Queryset = Category.objects.filter (Profil = Profil) –

Antwort

0

Soweit ich weiß, ist die Beziehung „Kategorie“ kann nur von einem in Verbindung gebracht werden Profil Instanz (mit den zugehörigen Kategorien), nicht aus dem Klassenprofil selbst. Deshalb erhalten Sie die Fehlermeldung.

Wenn Sie Profil in Ihrem Beispiel durch die tatsächliche Profilinstanz ersetzen (die ich lese, ist das, was Sie tatsächlich erreichen wollen), würde es besser funktionieren.

category=forms.ModelMultipleChoiceField(
    Category.objects.filter(id__in=your_profile_instance.category.all()), 
    widget=forms.CheckboxSelectMultiple() 
) 

oder nur

category=forms.ModelMultipleChoiceField(
    queryset=your_profile_instance.category.all()), 
    widget=forms.CheckboxSelectMultiple() 
) 

Habe ich verstehe Ihre Frage richtig?