0

私はdjango-nonrelにforeignKeysのリストを実装しようとしています(私はdbとして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 console を使用して作成):

$>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 としてインストール)
  • ジャンゴ-mongodb-エンジン 0.4.0
  • ジャンゴツールボックス==0.9.2
  • リスト項目
  • ピモンゴ==2.1.1

ご協力いただきありがとうございます。

アップデート:

投稿「 ListField with ForeignField in django-nonrel 」で述べたようにコードを変更しようとしましたが、それでも同じエラーが発生します...

4

2 に答える 2

1

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

于 2014-08-07T15:11:16.037 に答える
0

私は実際に何が間違っていたのかを理解しました。Listfield では、外部キー クラス タイプを文字列として宣言することは明らかに不可能です。奇妙な...
それがあなたに起こった場合は、次の変更を行ってください:

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

になります:

list = ListField(models.ForeignKey(AWUser))

何が起こっているのかについての良い説明として誰かがいるなら、私はそれを聞きたいです:)

于 2013-02-07T00:43:31.247 に答える