在表单中,我试图根据登录用户组筛选属于登录用户的“市场下拉”字段。它列出了所有下拉字段项。我在下面试过了,但我认为过滤器的部分出了问题。
Marketplace.objects.filter(groups__user=self.user)类InfringementForm(ModelForm):def __init__(self,user,*args,**kwargs):super(InfringementForm,self).__init__(*args,**kwargs) Sel.field‘model’..queryset=InfringementForm=侵权类Meta: ordering = '-updated',‘创建’def __str__(self):返回self.name‘
字段=“名称”、“链接”、“侵权者”、“播放器”、“删除”、“状态”、“屏幕截图”、“市场”
models.py
类市场(models.Model):name = models.CharField(max_length=100) updated = models.DateTimeField(auto_now=True) created = models.DateTimeField(auto_now_add=True) Group= models.ForeignKey(Group,on_delete=models.CASCADE,default=1)
发布于 2022-11-14 03:24:19
最后的答案是在表单中添加self.user = user,在视图中添加user。
forms.py
Marketplace.objects.filter(groups__user=self.user)类InfringementForm(ModelForm):def __init__(self,user,*args,**kwargs):self.user =用户超级(InfringementForm,self).__init__(*args,**kwargs)“截图”,“市场”
views.py
@login_required(login_url='login') def createInfringement(请求):user=request.user表单= InfringementForm(user=request.user)如果request.method == 'POST':form =InfringementForm(用户、request.POST、request.FILES)如果form.is_valid():form.save()返回重定向(‘home’)上下文={' form ':form}返回呈现(request,‘base/合成_form.html’,上下文)
发布于 2022-11-14 01:09:11
在__init__()方法中尝试如下:
def __init__(self, user, *args, **kwargs):
self.user = user
super(InfringementForm,self).__init__(*args, **kwargs)
self.fields['marketplace'].queryset = Marketplace.objects.filter(groups__user=self.user)发布于 2022-11-14 11:00:16
试试这个解决方案。
基本上,groups是Marketplace模型中的外键,它返回Group模型的完整对象。
您尝试使用完整对象进行筛选--在查询中是不可能的,因此可以使用用户实例的id进行筛选
代码会变成这样
class InfringementForm(ModelForm):
def __init__(self, user, *args, **kwargs):
super(InfringementForm,self).__init__(*args, **kwargs)
self.fields['marketplace'].queryset =
Marketplace.objects.filter(groups__user__id=self.user.id)
class Meta:
model = Infringementhttps://stackoverflow.com/questions/74425896
复制相似问题