Как использовать @property в моделях Django? как получить детали моделей компании и футзалузеров в одной таблице?

class FutsalUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(verbose_name='email address', max_length=255, unique=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(
        _('staff status'),
        default=True,
        help_text=_('Designates whether the user can log into this admin site.'),
    )

    objects = FutsalUserManager()
    USERNAME_FIELD = 'email'

    def __str__(self):
        return self.email

    @property
    def company_details(self):
       company_data =  Company.objects.filter(user= self)
       if company_data :
           company_data.name
           return company_data
       else:
           return None




class Company(TimeStampedModel):

    name = models.CharField(max_length=200)
    hr_name = models.CharField(max_length=200)
    hr_email = models.CharField(max_length=200)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, models.DO_NOTHING)
    hr_verified = models.BooleanField(default=False, blank=True)
    primary_phone = models.CharField(null=True, max_length=200)
    followed_by = models.CharField(max_length=200,default="Not assigned")
    comments = models.TextField(default="")

   

    def __str__(self):
        return self.name 

1. Нет необходимости создавать пользовательскую функцию в Model, чтобы получить другие значения из других таблиц, которые находятся в отношении.

[ 1 ] у вас должно быть related_name в таблице пользователей вашей компании. например

user = models.ForeignKey(
        settings.AUTH_USER_MODEL, models.DO_NOTHING, related_name='company')
# you can name company with something of your own choice.

# following will be more appropriate. 
user = models.ForeignKey(
        FutsalUser, models.DO_NOTHING, related_name='company')

[ 2 ] После того, как у вас есть имя_родственника, вы можете получить значения компаний следующим образом.

FutsalUser.objects.all().values('email', 'is_active', 'company__name', 'company__hr_email')

2. Кроме того, вы можете получить детали из таблицы Company вместо этого.

Company.objects.all().values('name', 'user__email') # you can add more field if you want.
Вернуться на верх