2011-01-06 1 views
0

私は次のモデル設定をしています。contrib.auth.userモデルを試して拡張し、「リレーションシップ」管理を追加してください

from django.db import models 
from django.contrib.auth.models import User 

class SomeManager(models.Manager): 
    def friends(self): 
     # return friends bla bla bla 


class Relationship(models.Model): 
    """(Relationship description)""" 
    from_user = models.ForeignKey(User, related_name='from_user') 
    to_user = models.ForeignKey(User, related_name='to_user') 
    has_requested_friendship = models.BooleanField(default=True) 
    is_friend = models.BooleanField(default=False) 

    objects = SomeManager() 

relationships = models.ManyToManyField(User, through=Relationship, symmetrical=False) 
relationships.contribute_to_class(User, 'relationships') 

ここで私はUserオブジェクトを取得し、Contrib_to_classを使用してUserオブジェクトに「relationships」を追加します。関係が表示されますが、User.relationships.friendsを呼び出すとfriends()メソッドが実行されますが、失敗します。どのように私はこれを行うだろう任意のアイデア?

たぶん、あなたはコールで ".objects" 欠落しているおかげで

+0

なぜユーザープロファイル機能を使用していませんか? http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-usersこれは 'User'クラスに機能を追加する適切な方法です。 –

+0

私はこれを「アプリ」としてリリースしたいと思っており、すべてのユーザーがプロファイルモジュールの設定を持っているわけではありません。 – dotty

+1

これは 'settings'への1行の変更です。だから誰も*プロファイルモジュールを設定できました。 –

答えて

1

を私の代わりにこれを行うだろう。

f= Relationships.objects.filter(from_user=some_user, is_friend=True) 

これは、Userを使いこなすのを節約します。

0

User.relationships.objects.friends() 
+0

'ManyRelatedManager'オブジェクトに 'オブジェクト'属性がありません。 – dotty

0

あなたのマネージャーを関連するルックアップに使用するようにDjangoに指示する必要があります。デフォルトでは、マネージャーは標準のものを使用します。 Managerでuse_for_related_fieldsを設定する必要があります - the documentation on thisを参照してください。

関連する問題