Как использовать @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.