首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-nonrel:在LisftField of ForeignKeys中添加元素

django-nonrel:在LisftField of ForeignKeys中添加元素
EN

Stack Overflow用户
提问于 2013-02-06 22:30:41
回答 2查看 905关注 0票数 0

我试图在django-nonrel中实现一个foreignKeys列表(我使用mongo作为db)。

以下是代码:

代码语言:javascript
复制
# models.py
from django.db import models
from django_mongodb_engine.contrib import MongoDBManager
from djangotoolbox.fields import ListField

class FriendList(models.Model):
    objects = MongoDBManager()
    list = ListField(models.ForeignKey('AWUser'))

    def add_friend(self, awuser):
        # awuser must be an instance of AWUser - I removed tests for more clarity
        self.list.append(awuser)
        self.save()

class AWUser(models.Model):
    objects = CustomUserManager()
    user = EmbeddedModelField('User')
    friends = EmbeddedModelField('FriendList')

问题是,当我调用user.friends.add_friend(user1)时,错误是"AttributeError:'str‘对象没有属性'_meta'“。

中断示例(使用./manage shell控制台制作):

代码语言:javascript
复制
$>user = AWUser.objects.all()[0]
$>user1 = AWUser.objects.all()[1]
$>user.friends.add_friend(user1)
#ask me if you need the complete error - I don't put it more more clarity
AttributeError: 'str' object has no attribute '_meta'

我需要的基本上是建立朋友名单。

如果你觉得我的不太好,请随意推荐一个不同的实现方式。我很想让我的实现工作,尽管.

此外,我并没有为了更清楚地将AWUser的所有变量都放在一起,但是如果需要的话,我可以添加它们。

相关的项目依赖性:

  • django 1.3.1 (安装为django-nonrel)
  • django-mongodb-引擎0.4.0
  • djangotoolbox==0.9.2
  • 列表项目
  • pymongo==2.1.1

谢谢你的帮助。

更新:

我试着修改代码,就像在帖子"ListField with ForeignField in django-nonrel“中说的,但是我仍然有同样的错误.

EN

回答 2

Stack Overflow用户

发布于 2014-08-07 15:11:16

根据Django MongoDB引擎文档,它建议使用djangotoolbox中的EmbeddedModel:

代码语言:javascript
复制
from djangotoolbox.fields import ListField, EmbeddedModelField

class Post(models.Model):
    ...
    comments = ListField(EmbeddedModelField('Comment'))

class Comment(models.Model):
    text = models.TextField()

编辑:忘记链接:http://django-mongodb-engine.readthedocs.org/en/latest/topics/embedded-models.html

票数 1
EN

Stack Overflow用户

发布于 2013-02-07 00:43:31

其实我刚搞清楚是怎么回事。显然,在Listfield中不可能将外键类类型声明为字符串。奇怪..。

如果这种情况发生在您身上,只需进行以下更改:

代码语言:javascript
复制
list = ListField(models.ForeignKey('AWUser'))

变成:

代码语言:javascript
复制
list = ListField(models.ForeignKey(AWUser))

如果有人能很好地解释正在发生的事情,我很想听听:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14740130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档