获取特定用户在 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'])

希望对您有所帮助。