Экземпляр Django ModelForm с настраиваемым набором запросов для определенного поля - PullRequest
24 голосов
/ 30 ноября 2009

У меня есть модель, не похожая на следующую:

class Bike(models.Model):
    made_at = models.ForeignKey(Factory)
    added_on = models.DateField(auto_add_now=True)

Все пользователи могут работать на нескольких фабриках, поэтому их профили имеют от ManyToManyField до Factory.

Теперь я хочу построить ModelForm для Bike, но я хочу, чтобы список made_at состоял только из фабрик, на которых работает текущий пользователь. Идея состоит в том, что пользователи должны иметь возможность добавлять собранные велосипеды и указывать, на каком заводе был изготовлен велосипед.

Как мне это сделать?

Ответы [ 3 ]

40 голосов
/ 30 ноября 2009

попробуйте что-то подобное в представлении

form  = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)

изменить фабричный набор запросов, чтобы он идентифицировал фабрику, на которой работает пользователь.

8 голосов
/ 30 ноября 2009

Ваш вопрос может быть дублированием этого .

S. Lott 's ответ есть билет, чтобы решить вашу проблему. Он ответил:

ForeignKey представлен django.forms.ModelChoiceField, который является ChoiceField, чьи выборы являются QuerySet модели. См. Ссылку для ModelChoiceField.

Итак, предоставьте QuerySet для атрибута queryset поля. Зависит от того, как строится ваша форма. Если вы создадите явную форму, у вас будут поля с именами напрямую.

form.rate.queryset = Rate.objects.filter(company_id=the_company.id) Если вы берете объект ModelForm по умолчанию, form.fields["rate"].queryset = ...

Это делается явно в представлении. Нет взлома.

0 голосов
/ 13 июля 2018

В настоящее время вы должны использовать:

    form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
        'alumno',
        'alumno__estudiante',
        'alumno__estudiante__profile',
        'item'
    )
...