Python Django中按self.request.user筛选对象列表
我无法让它工作:Python Django中按self.request.user筛选对象列表,python,django,class,view,request,Python,Django,Class,View,Request,我无法让它工作: class MyView(generic.ListView): context_object_name = 'my-model-list' template_name = 'my_models.html' def get_queryset(self): return MyModel.objects.filter(user=self.request.user) 我也试过了 return MyModel.objects.filter(us
class MyView(generic.ListView):
context_object_name = 'my-model-list'
template_name = 'my_models.html'
def get_queryset(self):
return MyModel.objects.filter(user=self.request.user)
我也试过了
return MyModel.objects.filter(user=User.objects.filter(name=self.request.user))
似乎self.request.user正在返回一个名称。我得到的错误是
Cannot query "a": Must be "User" instance.
用户的名字是“a”
我的模型是
from .models import User
class MyModel(models.Model):
user = models.ForeignKey(User)
有人能帮我吗
提前感谢。您以错误的方式继承了用户模型。
使用django.contrib.auth.models导入用户的
。所示代码是正确的。问题是您正在定义自己的用户类,而Django在发出请求时不知道如何处理它
最简单的方法是使用Django用户。如果坚持使用自己的用户类,则需要修改该类以正确继承Django用户和其他一些内容(在该类上存在一些堆栈溢出)
在您的./MyModel/models.py中,您将希望导入这样的用户:
from django.contrib.auth.models import User
保持其他模型和视图不变(除非它们也导入用户)
您可能还必须更新设置文件,使其看起来像这样(这可能不完全正确):
进行这些更改后,不要忘记迁移数据库
可以使用self.request.user.mymodel\u set.all()获取当前用户的所有查询
print(type(self.request.user))
和print(self.request.user)
会给你什么输出?我得到的输出可能是重复的:
a
我也不认为这是重复的,因为答案是代码不能在类级别上,我的代码不在类级别。如何在设置中导入用户和定义身份验证?我的代码看起来与您的工作相同,并且我的类型输出是django.contrib.auth.models.User
。通过这种方式从django.contrib.auth.models导入用户,然后再次尝试。我通过创建我自己的单独用户类Person修复了这个问题,该类名为Person,与用户使用一对一关系。谢谢大家的帮助<从Django.Curb.Audio.Model导入用户类人(model .model):用户=模型。OneToOneField(用户,OnLead=Model,Cype)<代码>只有答案是无用的,考虑编辑你的答案来解释你的代码所做的,以及它是如何与问题相关的。
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
from .models import User
class MyModel(models.Model):
user = models.ForeignKey(User)
class MyView(generic.ListView):
context_object_name = 'my-model-list'
template_name = 'my_models.html'
def get_queryset(self):
return self.request.user.mymodel_set.all()