2

最初は Group モデルのみを拡張しました。余分なフィールドは正しく機能していましたが、auth-user モデルに戻すと一貫性のない結果が得られました。

group1 = MyGroup(..)
user = group1.user_set.all()[0]
group2 = user.groups.all()[0]
group1 == group2 #(False!)
type(group1) #MyGroup..
type(group2) #Group..

次に考えたのは、auth.User モデルと auth.Group モデルの両方を拡張することでした。

構造例:

from django.contrib.auth.models import User As DjangoUser
from django.contrib.auth.models import Group As DjangoGroup

class MyGroup(DjangoGroup):
    extra1 = models.CharField(..)

class MyUser(DjangoUser):
    extra1 = models.CharField(..)

これは可能ですか?ここで修正されたというバグレポートを見ました。ただし、これを実現する正しい方法の例は見当たりませんでした。また、この部分がバグ修正後に必要かどうかも明確ではありませんでした。

manager = UserManager()
class MyUser(DjangoUser):
    signature = forms.CharField()
    post_count = forms.IntegerField()
    objects = manager
    _default_manager = manager

この種の行動のアイデア/例はありますか? ユーザー モデルで「グループ」リンクを再定義しようとしましたが、検証エラーが発生しました。理想的には、上記の例を実行して、group1 == group2 および type(group2) == type(MyGroup()) を実行できるようにしたいと考えています。

4

1 に答える 1

0

新しいフィールドを django ユーザー/グループ モデルに動的に追加して、新しいクラス タイプが作成されないようにすることができます。参考までに、http ://code.google.com/p/comaie-django-groups/source/browse/trunk/src/comaie/django/groups/models.py?r=5 を参照してください。

models.ForeignKey(
    グループ、
    null = 真、
    空白 = 真、
    related_name = '子供',
    verbose_name = _('親'),
    help_text = _('グループの親グループ。ルート ノードの場合はなし。')
.contribute_to_class(グループ、「親」)

def get_all_groups(self):
    """
    ユーザーがメンバーであるすべてのグループと、それらのすべての親グループを返します
    グループ。
    """
    direct_groups = self.groups.all()
    グループ = セット()

    direct_groups のグループ:
        祖先 = group.get_ancestors().all()
        祖先の anc の場合:
            groups.add(anc)
        groups.add(グループ)

    グループを返す

setattr(ユーザー、「get_all_groups」、get_all_groups)

于 2012-12-08T14:41:21.830 に答える