У меня проблемы с созданием набора запросов ModelChoiceField в ModelForm. Связанный менеджер model.objects был переопределен, чтобы отфильтровать результаты, чтобы получить только экземпляры, созданные фактическим пользователем. Вот мои модели:
class Bloc(ModelPrive):
TYPE_BLOC = (
('pleinchamps', 'plein champs'),
('tunnel', 'tunnel'),
('pepiniere', 'pépinière'),
('autre', 'autre'),
)
nb_planche = models.IntegerField(null=True)
caracteristique = models.CharField(max_length=200, null= True, blank=True)
geom = models.PolygonField(srid=4326)
type_bloc = models.CharField(max_length=200, blank=True, choices=TYPE_BLOC)
nom = models.CharField(max_length=200, null=True, unique= True)
class ModelPrive(models.Model):
created_by = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL, editable=False)
class Meta:
abstract = True
objects = ModelPriveManager()
class ModelPriveManager(models.Manager):
def get_queryset(self):
user = get_current_user()
return super().get_queryset().filter(created_by=user)
В моем менеджере get_current_user () возвращает фактического пользователя, который был перехвачен пользовательским промежуточным ПО.
Вот моя форма:
class BlocFormList(ModelForm):
choix_bloc = forms.ModelChoiceField(queryset = Bloc.objects.all().order_by('nom'), required=True)
class Meta:
model = Bloc
fields = ['choix_bloc']
Вот мой взгляд:
def planification(request):
form_bloc = BlocFormList()
if request.method == 'POST':
# some other code
return render(request, 'planification.html', locals())
Проблема в том, что когда я выполняю Blo c .objects.all () в представлениях, я получаю ожидаемый ответ (Blo c .objects .filter (создал_бай = пользователь)) но когда это делается внутри набора запросов модели формы, он ничего не возвращает (как если бы не было активного пользователя).
После некоторых проверок я обнаружил, что форма модели набор запросов даже не go в диспетчере.
Если кто-то знает, как это исправить, у меня больше нет идей.