【问题标题】:Saving value instead of ObjectID in ReferenceField在 ReferenceField 中保存值而不是 ObjectID
【发布时间】:2015-03-15 14:20:35
【问题描述】:

我使用 django1.7 和 mongoengine 并使用 RefrenceField 将用户存储在我的文档中,但不是存储名称 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 用户模型,但如果需要,可以更改用户模型。
任何帮助将不胜感激。在此先感谢。

【问题讨论】:

  • 但这似乎是正确的行为。为什么你想要不同的东西?
  • 当我必须再次使用该值时会出现问题,url中只显示对象ID,我有asked question但没有得到任何答案。 @丹尼尔罗斯曼
  • 你能发布查看代码吗?

标签: python django mongodb django-models mongoengine


【解决方案1】:

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

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

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

这样做会返回一个用户而不是 DBRef。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 2015-12-13
    • 2018-07-05
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    相关资源
    最近更新 更多