2017-02-10 2 views
0

私はDjangoで拡張ユーザモデルを持っています。ユーザテーブルと拡張ユーザテーブルからデータを取得

ユーザーを拡張するためのモデルは次のとおりです。今、私は、ユーザーがMemberテーブルからUserテーブルと番号からマッチングメールを存在するかどうかを確認したい

class Member(models.Model): 
    user_id = models.ForeignKey(to=User) 
    number = models.CharField(max_length=10) 
    match_code = models.CharField(max_length=50) 
    parent = models.ForeignKey("self", null=True, blank=True) 
    name = models.CharField(max_length=100) 
    address = models.CharField(max_length=255) 
    postcode = models.CharField(max_length=10) 
    city = models.CharField(max_length=100) 
    country = models.ForeignKey(to=Country, null=True) 
    language = models.ForeignKey(to=Language) 
    telephone = models.CharField(max_length=50) 
    mobile = models.CharField(max_length=50) 
    main_email = models.EmailField(null=True) 

    def __str__(self): 
     return self.name 

どうすればいいですか?次のように

は今、私はこれをやっている:

email = "[email protected]" 
user = User.objects.get(email=email) 
member = Member.objects.get(user_id=user.id) 

したがって、私はUserテーブルから最初のデータを取得し、その後、私はメンバーテーブルからすべてを取得します。

しかし、良い方法はありますか?

答えて

1

以下はそのチェックを行います。

User.objects.filter(email=email, member__number=number).exists() 

あなたが経由でこれらのメンバーを取得することができます。それを呼び出す、

  • あなたForeignKey'user_id'を呼び出すことはありません:2つのことが

    Member.objects.get(user_id__email=email, number=number) 
    

    'user'。フィールドuser_idが自動的に登録されます。

  • ユーザーあたり複数のメンバーが存在しない場合は、userOneToOneField
0

は、ユーザーが存在する場合:あなたの外部キーが本当にただuserと呼ばれるべき

Member.objects.get(user_id__email=email) 

注意、ではない:それはあなたが望むかどう

if User.objects.filter(email=email).exists(): 
    member = Member.objects.get(user_id=User.objects.get(email=email).id) 
1

あなたは、一度にメンバーを取得することができますuser_id

関連する問題