私は2つのアプリ" account "と" myapp "を持っています。私は、request.userと同じ組織に属する教師オブジェクトだけを表示するようにしています。 user.profile.organisation
Django:モデルの `user`フィールドにアクセスするOneToOneField関係をトラバースする - NameError
from django.contrib.auth.models import User
class Teacher(models.Model):
user = models.OneToOneField(User, related_name='teacher')
myappに/ビューのようなもので、ユーザプロファイル情報にアクセスできます
thisブログ記事から
アカウント/ models.py
from django.contrib.auth.models import User
class Organisation(models.Model):
name = models.CharField(max_length=100, unique=True)
is_active = models.BooleanField(default=True)
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
organisation = models.ForeignKey(Organisation, editable=False)
is_organisationadmin = models.BooleanField(default=False)
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
注最後の行、 .py
from myproject.account.models import Organisation, UserProfile
from myproject.myapp.models import Teacher
from django.contrib.auth.models import User
def homepage(request):
if request.user.is_authenticated():
teachers = Teacher.objects.filter(user.profile.organisation == request.user.profile.organisation, user__is_active = True)
「/ homepage /にNameErrorが発生しました。グローバル名 'user'が定義されていません」。私はこれが、私が教師に正しくアクセスしていないからだと思う。各教師オブジェクトのユーザー属性。しかし、私は間違っている可能性がある。
私は関係をトラバース逆の組み合わせのすべての種類試してみた:
user.is_active
user__is_active
user.profile.organisation
user.profile__organisation
のが、上記の多くは、「ホームページ/キーワード/時でSyntaxErrorを表現することはできません」私を与えるので、私は思います現在の化身は大体正しいです。
奇妙なことに、フィルタの右側が正常に動作するようです(= request.user.profile.organisation
一部)
ありがとうございます。私は、私の質問のどこかに無知があるという気持ちがあった。私は理解していましたが、間違っていると私は思っていました。関係を逆にするには 'child__parent__parent_field'を使用しますが、' parent.child.child_field'を転送します。これはあなたがリンクしたドキュメントの最初の4つの段落にあるので、ありがたいです。しかし、 'user.profile'トリックではうまく動作しなかったので、すべてのユーザがプロファイルを持っていることを確認して、' user__userprofile'に戻します。 – nimasmi