Как я расширяю модель Django Group?

Существует ли способ расширить встроенный объект 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()

Действительно ли там кто-либо эквивалентен этому подходу для расширения группы? В противном случае существует ли альтернативный подход, который я могу проявить?

39
задан Serjik 19 December 2015 в 09:38
поделиться

1 ответ

Вы можете создать модель, которую группу подклассов добавляют свои собственные поля и используйте 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
24
ответ дан 27 November 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: