Django — несколько профилей пользователей

Первоначально я начал свой UserProfile следующим образом:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    verified = models.BooleanField()
    mobile = models.CharField(max_length=32)

    def __unicode__(self):
        return self.user.email

Который прекрасно работает вместе с AUTH_PROFILE_MODULE = 'accounts.UserProfile', установленный в settings.py.

Однако на моем веб-сайте есть два разных типа пользователей: частные лица и корпоративные пользователи, каждый из которых имеет свои уникальные атрибуты. Например, я бы хотел, чтобы у моих индивидуальных пользователей был только один пользователь, поэтому у меня было user = models.OneToOneField(User), а для корпоративных пользователей я бы хотел, чтобы у них было несколько пользователей, связанных с одним и тем же профилем, поэтому вместо этого я бы использовал user = models.ForeignKey(User).

Поэтому я подумал о разделении модели на две разные модели, IndivProfileи CorpProfile, обе наследующие от UserProfileпри перемещении атрибутов, специфичных для модели, в соответствующие подмодели. Мне это кажется хорошей идеей и, вероятно, сработает, однако я не смогу указать AUTH_PROFILE_MODULEтаким образом, поскольку у меня есть два профиля пользователя, которые будут разными для разных пользователей.

Я также подумал о том, чтобы сделать это наоборот, UserProfileнаследуя от нескольких классов (моделей), примерно так:

class UserProfile(IndivProfile, CorpProfile):
    # some field

    def __unicode__(self):
        return self.user.email

Таким образом, я бы установил AUTH_PROFILE_MODULE = 'accounts. UserProfile'и решить его проблему.Но не похоже, что это сработает, так как наследование в python работает слева направо и все переменные в IndivProfileбудут доминирующими.

Конечно, у меня всегда может быть одна единственная модель с переменными IndivProfileи CorpProfileвперемешку, а затем я буду использовать нужные, где это необходимо. Но это просто не выглядит чистым для меня, я бы предпочел, чтобы они были разделены и использовали соответствующую модель в соответствующем месте.

Любые предложения чистогоспособа сделать это?

25
задан Aziz Alfoudari 10 March 2012 в 20:58
поделиться