Существует ли способ расширить встроенный объект Django Group добавить дополнительные атрибуты, подобные способу, которым можно расширить пользовательский объект? С пользовательским объектом можно сделать следующее:
class UserProfile(models.Model):
user = models.OneToOneField(User)
и добавьте следующее к settings.py файлу
AUTH_PROFILE_MODULE = 'app.UserProfile'
который получает Вас:
profile = User.objects.get(id=1).get_profile()
Действительно ли там кто-либо эквивалентен этому подходу для расширения группы? В противном случае существует ли альтернативный подход, который я могу проявить?
Вы можете создать модель, которую группу подклассов добавляют свои собственные поля и используйте Masменительную менеджер для возврата любых пользовательских запросов, которые вам нужны. Вот усеченный пример, показывающий, как я расширил группу для представления семей, связанных со школой:
from django.contrib.auth.models import Group, User
class FamilyManager(models.Manager):
"""
Lets us do querysets limited to families that have
currently enrolled students, e.g.:
Family.has_students.all()
"""
def get_query_set(self):
return super(FamilyManager, self).get_query_set().filter(student__enrolled=True).distinct()
class Family(Group):
notes = models.TextField(blank=True)
# Two managers for this model - the first is default
# (so all families appear in the admin).
# The second is only invoked when we call
# Family.has_students.all()
objects = models.Manager()
has_students = FamilyManager()
class Meta:
verbose_name_plural = "Families"
ordering = ['name']
def __unicode__(self):
return self.name