У меня есть несколько моделей профилей пользователей, унаследованных от одного базового класса, например:
class BaseProfile(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100)
...
class Meta:
abstract = True
class DoctorProfile(BaseProfile):
license_no = models.CharField(max_length=10)
...
class PharmacistProfile(BaseProfile):
pass
Когда у меня есть пользовательский экземпляр, я бы хотел получить его профиль.
Мне не хочется проверять, есть ли у пользователя профиль один за другим с помощью sth. как это:
if user.doctorprofile_set.all().count() == 1:
return user.doctorprofile_set.all()[0]
elif user.pharmacistprofile_set.all().count() == 1:
return user.pharmacistprofile_set.all()[0]
...
для каждого профиля - лучший способ, поскольку он не СУХОЙ и требует дополнительных запросов к базе данных.
Каков наилучший способ сделать это?
edit: было бы неплохо определить AUTH_PROFILE_MODULE в настройках, чтобы указывать на базовую модель, такую как AUTH_PROFILE_MODULE = 'profiles.baseprofile'
, и иметь возможность использовать user.get_profile () для каждого пользователя с различными классами профилей, производными от того же Базовый профиль.