gpt4 book ai didi

python - models.manager 的 Django forms.ModelChoiceField 查询集问题

转载 作者:行者123 更新时间:2023-12-05 05:04:00 26 4
gpt4 key购买 nike

我在 ModelForm 中创建 ModelChoiceField 查询集时遇到问题。相关的 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())

问题是,当我在 View 中执行 Bloc.objects.all() 时,我得到了预期的答案 (Bloc.objects.filter(created_by=user)) 但是当它在模型表单的查询集中完成时,它什么都不返回(就像没有活跃用户一样)。

经过一些检查,我发现模型表单查询集甚至没有进入管理器。

如果有人知道如何纠正这个,我没有更多的想法。

最佳答案

看到这个帖子Django ModelForm overriding __init__ ,我终于通过覆盖我的 ModelForm 的 init 找到了我的解决方案:

class BlocFormList(ModelForm):

blocs = None
choix_bloc = forms.ModelChoiceField(label='Blocs', queryset=blocs, required=True)

def __init__(self, *args, **kwargs):
self.blocs = Bloc.objects.all()
super(BlocFormList, self).__init__(*args, **kwargs)
self.fields['choix_bloc'].queryset = self.blocs

class Meta:
model = Bloc
fields = ['choix_bloc']

这很好用。

关于python - models.manager 的 Django forms.ModelChoiceField 查询集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61321079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com