我无法让这个工作:
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)
任何人都可以帮助我吗?
提前谢谢。
答案 0 :(得分:1)
您以错误的方式继承User模型。
请改用from django.contrib.auth.models import User
。
答案 1 :(得分:1)
您显示的代码是正确的。问题是您正在定义自己的User类,而Django在发出请求时不知道如何处理它。
最简单的方法是使用Django用户。如果您坚持使用自己的用户类,则需要修改该类以正确继承Django用户和其他一些东西(其上有一些StackOverflows)。
在./MyModel/models.py中,您需要导入用户:
from django.contrib.auth.models import User
保留其他模型和视图(除非他们也导入用户)。
您可能还需要更新设置文件,看起来像这样(这可能不完全正确):
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
在进行这些更改后,不要忘记迁移数据库。
答案 2 :(得分:0)
您可以使用self.request.user.mymodel_set.all()获取当前用户的所有查询
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()