我已经尝试了好一阵子了,没有任何运气。我有这样的模型:
class List(models.Model):
name = models.CharField(max_length=100, default="")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='lists')
def __str__(self):
returnself.name
class Meta:
unique_together = ['name', 'user']
每个用户都可以创建自己的列表并将值添加到这些列表中。我已经添加了值,并且所有其他工作都正常了,但是添加到这些值的表单中,我将需要进行过滤以仅显示用户自己的列表,现在它显示了每个用户创建的所有列表...这是表单:
class data_form(forms.Form):
user_lists = List.objects.all()
selection = forms.ModelChoiceField(queryset=user_lists)
data = forms.IntegerField()
任何想法如何过滤?我有临时的“ list.objects.all()”,因为不希望它给崩溃服务器的错误提供帮助。我已经看了很多关于stackoverflow的示例,但是它们似乎都不是我要找的东西。。 :)
答案 0 :(得分:0)
也就是说,您在视图中实例化表单时将request.user
传递给表单:
frm = DataForm(user=request.user)
然后在表单类的__init__
中,可以将用户过滤的查询集分配给您的字段:
class DataForm(forms.Form):
def __init__(self, *args, **kwargs):
user = kwargs.pop("user")
super(DataForm, self).__init__(*args, **kwargs)
self.fields['selection'].queryset = List.objects.filter(user=user)
答案 1 :(得分:0)
您可以将表单设置为在初始化时使用用户,然后从那里获得按用户过滤的新查询集。
class DataForm(forms.Form):
selection = forms.ModelChoiceField(queryset=List.objects.none())
data = forms.IntegerField()
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['selection'].queryset = List.objects.filter(user=user)
您将像这样初始化表格:
form = DataForm(request.user)