0

フルネームに基づいて(auth.userから)ユーザーをフィルタリングする必要があります。でユーザーのフルネームをアドレス指定できることは知っていますがuser.get_full_name()、この属性でフィルタリングすることは可能ですか?

のようなことをするuser = User.objects.filter( ... )必要がありますが、属性をフィードする必要があります。これに使用できる属性はありますか?

4

2 に答える 2

1

残念ながら、プロパティとしてではありません。

Django User モデルで利用可能なプロパティは次のとおりです。

  • ユーザー名
  • パスワード
  • Eメール
  • ファーストネーム
  • 苗字

しかし、とにかくフィルターを実行すると、次のようになります

User.object.filter(first_name="Jimminy", last_name="Cricket")

あなたができることは、プロファイルのカスタムフォームを作成することです.

class UserProfile(models.Model):
   full_name = models.CharField()
   user = models.ForeignKey(User)

   def save(self, *args, **kwargs):
      self.full_name = "Jimminy Cricket" #but not hardcoded ofc.
      super(UserProfile, self).save(*args, **kwargs)

そしてそれを次のようにフィルタリングします

profile = UserProfile.objects.get(full_name="Jimminy Cricket")
print profile.user

2018 年 15 月 4 日更新

Q オブジェクトを使用して同じことを達成することもできます

from django.db.models import Q
from django.contrib.auth import get_user_model

UserModel = get_user_model()
UserModel.objects.filter(Q(first_name='Jiminy'), Q(last_name='Cricket'))

次のSQLを出力します

'SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE ("auth_user"."first_name" = Jiminy AND "auth_user"."last_name" = Cricket)'

したがって、中間モデル/フォームを取り除きます。

于 2013-07-29T19:08:10.513 に答える