Обработка уникальности в мультитенантной настройке Django - PullRequest
1 голос
/ 22 января 2010

У меня мультитенантная база данных Django. Все мои мультитенантные модели с поддержкой импорта импортируются из класса AccountSpecificModel, который как FK, в класс Account. Теперь у меня есть unique=True и unqiue_together в Meta, которые не указывают account.

В моем сценарии для AccountSpecificModel уникальность не имеет никакого значения, если только она не заботится о account, что означает, что я хочу преобразовать каждый unique в unique_together с account и симлар для unique_together ,

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 26 января 2010

Если я вас правильно понимаю, это то, что вы хотите:

class Client(models.Model):
    account = models.ForeignKey(Account)
    email = models.EmailField()

    class Meta:
        unique_together = (('account', 'email'),)

Обратите внимание на "два кортежа", которым я назначил unique_together. Вы можете создать стандартный кортеж, но если вы хотите создать несколько уникальных полей вместе, вам все равно придется изменить его.

Теперь у 500 разных учетных записей может быть клиент с адресом электронной почты example@example.com, но ни у одной учетной записи не может быть 2 клиентов с одинаковым адресом электронной почты.

0 голосов
/ 22 января 2010

Я не совсем понял ваш вопрос, но обнаружил, что при реализации сложных настроек класса модели django одним хорошим решением является фабрика классов. Я обнаружил, что это менее сложно и менее удивительно, чем множественное наследование и другая магия.

def factory(superclass, arguments):
    class SomeClass(superclass):
        [...]

        class Meta:
            [...]

    return SomeClass

RealClass = factory(SuperClass, args)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...