Экземпляр Django ModelForm с настраиваемым набором запросов для определенного поля

StackOverflow https://stackoverflow.com/questions/1821289

  •  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 состоял только из фабрик, на которых работает текущий пользователь , Идея состоит в том, что пользователи должны иметь возможность добавлять собранные велосипеды и указывать, на каком заводе был изготовлен велосипед.

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

Это было полезно?

Решение

Ваш вопрос может быть этим обманом <.

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 = ...

     

Это делается явно в представлении. Нет хакинг вокруг.

Другие советы

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

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'
    )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top