django ModelMultipleChoiceField queryset / filter для уже связанных объектов - PullRequest
3 голосов
/ 02 декабря 2010

У меня есть объект профиля, имеющий много отношения к категории


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

В моей форме я хочу отобразить флажок только для категорий, связанных с профилем Код ниже будет отображать все категории.


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

Как мне написать набор запросов, чтобы я показывал только категории, связанные с профилем? У меня есть варианты этого:


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

Имеет эту ошибку: объект 'ReverseManyRelatedObjectsDescriptor' не имеет атрибута 'all'

1 Ответ

0 голосов
/ 15 сентября 2015

Насколько я знаю, отношение "категория" может быть связано только с экземпляром профиля (с указанием связанных категорий), а не с самим классом профиля. Вот почему вы получаете сообщение об ошибке.

Если вы замените Profile в своем примере фактическим экземпляром Profile (который я прочитал - это то, чего вы на самом деле пытаетесь достичь), он будет работать лучше.

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

или просто

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

Правильно ли я понял ваш вопрос?

...