在 property/method Django 中访问自引用对象

Accessing self reference object in property/method Django

我有一个用户模型

class Account(AbstractBaseUser):

    first_name = models.CharField(max_length = 255, unique = False)
    last_name = models.CharField(max_length = 255, unique = False)
    email = models.EmailField(verbose_name = "email", max_length = 60, unique = True)

    is_sponsor = models.BooleanField(blank=True, default=True, help_text='Check if the user is a sponsor', verbose_name='Is this user a sponsor?')
    sponsored_by = models.ForeignKey('self',blank=True,null=True, on_delete=models.SET_NULL, default=None,limit_choices_to={'is_sponsor': True}),

    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = 'email' 

    REQUIRED_FIELDS = [
        'first_name',
        'last_name',
    ]

我制作了一个属性,我需要使用'sponsored_by'

@property
def sponsored_by_test(self):
    if self.sponsored_by is not None:
        if self.sponsored_by.first_name=="test":
            return True
    return False

我测试的时候,

x = Account.objects.get(first_name="test")
print(x.sponsored_by)

>>>  (<django.db.models.fields.related.ForeignKey>,)

因此我无法访问 属性(或任何地方)中的 'sponsored_by' 变量。

我是不是漏掉了什么?

您需要调用 属性 x.sponsored_by_test 而不是 x.sponsored_by

如此简单:

In [11]: b = Account.objects.create(first_name='test2', last_name='2', email='123@qq.com2')

In [12]: x.sponsored_by=b

In [13]: x.save()

In [14]: print(x.sponsored_by)
123@qq.com2

为 属性

@property
def sponsored_by_test(self):
    return getattr(self.sponsored_by, 'first_name', None) == "test"