【问题标题】:django-nonrel: add element in LisftField of ForeignKeysdjango-nonrel:在 ForeignKeys 的 LisftField 中添加元素
【发布时间】:2013-02-06 22:30:41
【问题描述】:

我正在尝试在 django-nonrel 中实现一个外键列表(我使用 mongo 作为数据库)。

代码如下:

# 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' object has no attribute '_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 的所有变量都放入,但如果需要,我可以添加它们。

相关项目依赖:

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

感谢您的帮助。

更新:

我尝试按照帖子“ListField with ForeignField in django-nonrel”中所述更改代码,但我仍然遇到相同的错误...

【问题讨论】:

    标签: django mongodb foreign-keys django-nonrel listfield


    【解决方案1】:

    根据 Django MongoDB Engine 文档,建议使用 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

    【讨论】:

      【解决方案2】:

      我实际上只是想出了问题所在。 在 Listfield 中,显然不可能将外键类类型声明为字符串。奇怪...
      如果发生这种情况,只需进行以下更改:

      list = ListField(models.ForeignKey('AWUser'))
      

      变成:

      list = ListField(models.ForeignKey(AWUser))
      

      如果有人能很好地解释发生了什么,我很想听听 :)

      【讨论】:

        猜你喜欢
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 2015-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多