从User表和扩展User表中获取数据

时间:2017-02-10 14:13:29

标签: python django

我在Django中扩展了用户模型。

扩展用户的模型如下:

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

现在我想检查用户是否存在来自User表的电子邮件和来自Member表的数字。

我该怎么做?

现在我按照以下方式执行此操作:

email = "some@email.com"
user = User.objects.get(email=email)
member = Member.objects.get(user_id=user.id)

因此,我从User表中获取第一个数据,然后从成员表中获取所有内容。

但是有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

如果你想要的话,你可以一次性获得会员:

Member.objects.get(user_id__email=email)

请注意,您的外键实际上应该只调用user,而不是user_id

答案 1 :(得分:1)

以下将进行检查:

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

您可以通过以下方式检索这些成员:

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

两件事:

  • 请勿致电ForeignKey 'user_id',将其称为'user'。然后将自动创建字段user_id
  • 如果每位用户不应包含多个成员,请将user设为OneToOneField

答案 2 :(得分:0)

如果用户存在:

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