2015-09-03 2 views
0

Скажите, что у меня есть таблица под названием TBL_ACCOUNT, которая содержит всех моих пользователей, и таблицу TBL_EMAIL_SUBSCRIPTION, в которой содержатся фиды, на которые подписан пользователь. Я пытаюсь сделать так, чтобы могла быть только одна запись каждой комбинации + пользователя + фида, поэтому user1 может быть только подписана на канал 1 один раз, но user1 может быть подписан на каналы feed1 и feed2 одновременно.Создание уникального индекса с peewee для таблицы с внешним ключом

Это то, что моя модель выглядит следующим образом:

class TBL_ACCOUNT(BaseModel): 
    USERNAME = CharField(unique=True) 
    PASSWORD = CharField() 
    EMAIL = CharField(unique=True) 

class TBL_EMAIL_SUBSCRIPTION(BaseModel): 
    USER = ForeignKeyField(TBL_ACCOUNT) 
    FEED = CharField() 

    class Meta: 
     indexes = (("USER_id", "FEED", True)) 

Я также пробовал только с помощью «USER» для индексов, но это не сработало, как база данных все-таки получил дубликаты.

ответ

3

Обращайтесь к документам peewee. http://docs.peewee-orm.com/en/latest/peewee/models.html#indexes-and-constraints В вашем случае она должна выглядеть так:

class Meta: 
    indexes = (
     (("USER_id", "FEED"), True), 
    ) 

Примечание с использованием запятых! Это очень важно, потому что индексы являются кортежами кортежей.

-2

Это будет работать для двух внешних ключей, но я не уверен только в одном.

class Meta: 
    primary_key = CompositeKey("USER", "FEED") 
+0

Нет, это не полезно. У Александра есть правильный ответ. Автору вопроса не хватало круглых скобок. Пожалуйста, не извергайте бесполезные, бесполезные комментарии, подобные этому. – coleifer

+0

@coleifer Извините, если я обидел вас, сэр. Я никогда не прощу себе этого. – Neil

Смежные вопросы