获取特定用户在 django 中的帖子 [Mongonengine]
Get posts in django by specific users [Mongonengine]
我在 django 1.7 中使用 mongoengine,我制作了一个名为 Projects 的模型,下面是代码:
class Projects(Document):
user = ReferenceField(User, reverse_delete_rule=CASCADE)
p_name = StringField(max_length=70, required=True)
author = StringField(max_length=70, required=True)
url = StringField(max_length=200, required=True)
short_discription = StringField(max_length=100, required=True)
long_discription = StringField()
logo_url = StringField(max_length=200, required=False)
def __unicode__(self):
return self.p_name
def save(self, *args, **kwargs):
self.p_name = self.p_name
return super(Projects, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('view_project', args=[self.p_name])
如模型中所示,我在我的模型中引用了用户,并且它将当前登录的用户存储在 mongodb 中,没有任何问题,但我不知道如何列出特定用户提交的项目。
所以我想要一个页面 /user/dhruv(例如)它会列出我的所有项目。
通过Detail View(不知道对不对)我得到了一个post,但即使申请了也没有超过一个模板中的 for 循环:
class view_user(DetailView):
model = Projects
context_object_name = "project"
def get_template_names(self):
return ["view_user.html"]
def get_object(self):
return Projects.objects(user=self.kwargs['pk'])[0]
并且在这里使用 ListView 给我一个错误:
type object 'Projects' has no attribute '_default_manager'
在我的 urls.py 中:
url(r'^user/(?P<pk>[\w\d]+)/$', view_user.as_view(), name='detail'),
一些随机 post 的 Json 格式如下所示:
{
"_id" : ObjectId("54e649887818f43658c85e74"),
"user" : ObjectId("54db3e5d7818f4253e5da0db"),
"p_name" : "project1",
"author" : "dhruv",
"url" : "lkn",
"short_discription" : "khb",
"long_discription" : "kjbjk",
"logo_url" : "bjk"
}
如果有人知道如何解决它,那将是一个很大的帮助。
P.S。 : 提前致谢。
您在 get_object
方法中通过用户的 id
值获取 Project
实例时遇到问题。你应该先打电话给filter
。
def get_object(self):
return Projects.objects.filter(user=self.kwargs['pk'])[0]
但是,您的问题更为根本。您应该子类化 ListView
而不是 DetailView
以获取给定用户的项目。要使其适用于像 /user/dhruv/ 这样的 url,您可以执行以下操作;
urls.py
url(r'^user/(?P<author>\w+)/$', UserProjectsListView.as_view(), name='detail'),
views.py
class UserProjectsListView(ListView):
model = Projects
def get_queryset(self):
return self.model.objects.filter(author=self.kwargs['author'])
希望对您有所帮助。
我在 django 1.7 中使用 mongoengine,我制作了一个名为 Projects 的模型,下面是代码:
class Projects(Document):
user = ReferenceField(User, reverse_delete_rule=CASCADE)
p_name = StringField(max_length=70, required=True)
author = StringField(max_length=70, required=True)
url = StringField(max_length=200, required=True)
short_discription = StringField(max_length=100, required=True)
long_discription = StringField()
logo_url = StringField(max_length=200, required=False)
def __unicode__(self):
return self.p_name
def save(self, *args, **kwargs):
self.p_name = self.p_name
return super(Projects, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('view_project', args=[self.p_name])
如模型中所示,我在我的模型中引用了用户,并且它将当前登录的用户存储在 mongodb 中,没有任何问题,但我不知道如何列出特定用户提交的项目。
所以我想要一个页面 /user/dhruv(例如)它会列出我的所有项目。
通过Detail View(不知道对不对)我得到了一个post,但即使申请了也没有超过一个模板中的 for 循环:
class view_user(DetailView):
model = Projects
context_object_name = "project"
def get_template_names(self):
return ["view_user.html"]
def get_object(self):
return Projects.objects(user=self.kwargs['pk'])[0]
并且在这里使用 ListView 给我一个错误:
type object 'Projects' has no attribute '_default_manager'
在我的 urls.py 中:
url(r'^user/(?P<pk>[\w\d]+)/$', view_user.as_view(), name='detail'),
一些随机 post 的 Json 格式如下所示:
{
"_id" : ObjectId("54e649887818f43658c85e74"),
"user" : ObjectId("54db3e5d7818f4253e5da0db"),
"p_name" : "project1",
"author" : "dhruv",
"url" : "lkn",
"short_discription" : "khb",
"long_discription" : "kjbjk",
"logo_url" : "bjk"
}
如果有人知道如何解决它,那将是一个很大的帮助。
P.S。 : 提前致谢。
您在 get_object
方法中通过用户的 id
值获取 Project
实例时遇到问题。你应该先打电话给filter
。
def get_object(self):
return Projects.objects.filter(user=self.kwargs['pk'])[0]
但是,您的问题更为根本。您应该子类化 ListView
而不是 DetailView
以获取给定用户的项目。要使其适用于像 /user/dhruv/ 这样的 url,您可以执行以下操作;
urls.py
url(r'^user/(?P<author>\w+)/$', UserProjectsListView.as_view(), name='detail'),
views.py
class UserProjectsListView(ListView):
model = Projects
def get_queryset(self):
return self.model.objects.filter(author=self.kwargs['author'])
希望对您有所帮助。