我试图在django-nonrel中实现一个foreignKeys列表(我使用mongo作为db)。
以下是代码:
# 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控制台制作):
$>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的所有变量都放在一起,但是如果需要的话,我可以添加它们。
相关的项目依赖性:
谢谢你的帮助。
更新:
我试着修改代码,就像在帖子"ListField with ForeignField in django-nonrel“中说的,但是我仍然有同样的错误.
发布于 2014-08-07 15:11:16
根据Django MongoDB引擎文档,它建议使用djangotoolbox中的EmbeddedModel:
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
发布于 2013-02-07 00:43:31
其实我刚搞清楚是怎么回事。显然,在Listfield中不可能将外键类类型声明为字符串。奇怪..。
如果这种情况发生在您身上,只需进行以下更改:
list = ListField(models.ForeignKey('AWUser'))变成:
list = ListField(models.ForeignKey(AWUser))如果有人能很好地解释正在发生的事情,我很想听听:)
https://stackoverflow.com/questions/14740130
复制相似问题