django два внешних ключа уникальная запись

У меня есть три модели django:

class Item(models.Model):
    itemid = models.IntegerField(default=0, unique=True)

class Region(models.Model):
    regionid = models.IntegerField(default=0, unique=True)

class Price(models.Model):
    regionid = models.ForeignKey(Region)
    itemid = models.ForeignKey(Item)

Теперь моя проблема заключается в следующем:

Мне нужно, чтобы цена была уникальной для комбинации товара и региона (например, itemid = 1 и regionid = a, поэтому может быть только одна цена, которая может иметь внешние ключи itemid = 1 и regionid = a).

Есть ли способ навязать эти отношения?


person TangoAlee    schedule 20.02.2014    source источник


Ответы (2)


Вы должны взглянуть на unique вместе! Это может решить вашу проблему.

person Alvaro    schedule 20.02.2014
comment
поэтому я бы добавил что-то подобное в конец моего ценового класса? class Meta: unique_together = (regionid, itemid)? - person TangoAlee; 20.02.2014

Django пока не поддерживает составные индексы. Принятое решение — зарегистрировать обработчик сигнала post_syncdb — https://docs.djangoproject.com/en/1.6/ref/signals/#post-syncdb

Вот шаблон (вам нужно будет заполнить соответствующие данные):

from django.db import connection
from django.db.models.signals import post_syncdb
def callback(sender, **kwargs):
    cur = connection.cursor()
    cur.execute('CREATE UNIQUE INDEX ...')

post_syncdb.connect(callback, sender=app.models)
person user590028    schedule 20.02.2014
comment
Мне жаль, что тебе придется держать меня за руку еще немного. Я очень новичок в python и django - я прочитал предоставленную вами ссылку, но до сих пор ее не понимаю. Куда бы я это положил? Как бы я назвал уникальный индекс? - person TangoAlee; 20.02.2014
comment
Я исправляюсь — Альваро прав. У Джанго теперь есть «уникальность вместе» (и похоже, что они были у них некоторое время) - person user590028; 20.02.2014