Экземпляр Django ModelForm с настраиваемым набором запросов для определенного поля
-
10-07-2019 - |
Вопрос
У меня есть модель, не похожая на следующую:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
Все пользователи могут работать на нескольких фабриках, и поэтому все их профили имеют от ManyToManyField
до Factory
.
Теперь я хочу создать ModelForm
для Bike
, но я хочу, чтобы список made_at
состоял только из фабрик, на которых работает текущий пользователь , Идея состоит в том, что пользователи должны иметь возможность добавлять собранные велосипеды и указывать, на каком заводе был изготовлен велосипед.
Как мне это сделать?
Решение
Ваш вопрос может быть этим обманом <а>. р> есть билет, чтобы решить вашу проблему. Он ответил:
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 = ...
Это делается явно в представлении. Нет хакинг вокруг.
Другие советы
попробуйте что-то подобное в представлении
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
измените фабричный набор запросов так, чтобы он идентифицировал фабрику, на которой работает пользователь.
В настоящее время вы должны использовать:
form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
'alumno',
'alumno__estudiante',
'alumno__estudiante__profile',
'item'
)