在ReferenceField中保存值而不是ObjectID

时间:2015-03-15 14:20:36

标签: python django mongodb django-models mongoengine

我正在使用django1.7和mongoengine并使用RefrenceField将用户存储在我的Document中,但是不存储名称mongodb存储objectid。无论如何都存储名称而不是objectid。

我的模特:

class Question(Document):
    user = ReferenceField(User, reverse_delete_rule=CASCADE)
    title = StringField(max_length=70, required=True)
    body = StringField()
    tags = StringField()
    date_modified = DateTimeField(default=datetime.datetime.now)
    rating = IntField(default=0)
    def __unicode__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.title = self.title
        return super(Question, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('view_question', args=[self.title])

Json文档样本:

{ 
    "_id" : ObjectId("55057c867818f41c7db83888"),
    "user" : ObjectId("54db3e5d7818f4253e5da0db"),
    "title" : "Question1",
    "body" : "<p>This is body for question 1</p>\r\n",
    "tags" : "tag1",
    "date_modified" : ISODate("2015-03-15T12:35:18.331Z"),
    "rating" : 0
}

我的观看代码:

class new_category(CreateView):
    model = Category
    form_class = NewCategoryForm
    success_url = reverse_lazy('registered')
    def get_template_names(self):
        return["new_category.html"]

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.save()
        return super(new_category, self).form_valid(form)

和我的网址:

url(r'^new_question/', new_question.as_view(),name='new_question'),

我正在使用默认的django用户模型,但如果需要在用户模型中进行更改仍然可以。
任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

行为是正确的,我认为你想要做的是自动取消引用用户对象。

要做到这一点,只需更改模型以反映类似的内容。

user = ReferenceField(User, reverse_delete_rule=CASCADE, dbref=True)

通过执行此操作,它将返回用户而不是DBRef。