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
така че бих добавил нещо подобно в края на моя ценови клас? клас 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
Поправям се - Алваро е прав. Django вече има „уникален заедно“ (и изглежда, че го имат от известно време) - person user590028; 20.02.2014