Django 1.1.1, требуется пользовательская проверка в зависимости от других полей - PullRequest
1 голос
/ 09 февраля 2010

У меня есть 3 модели в приложении Django, у каждой есть поле "имя хоста". По нескольким причинам они отслеживаются в разных моделях:

class device(models.Model):
...
hostname = models.CharField(max_length=45, unique=True, help_text="The hostname for this device")
...

class netdevice(models.Model):
...
hostname = models.CharField(max_length=45, unique=True, help_text="Name Associated with Device", verbose_name="Hostname")
...

class vipdevice(models.Model):
...
hostname = models.CharField(max_length=45, unique=True, help_text="Name associated with this Virtual IP", verbose_name="name")
...

Как настроить проверку, чтобы убедиться, что поля имени хоста не дублируются ни на одной из 3 моделей?

Я посмотрел на http://docs.djangoproject.com/en/dev/ref/validators/#ref-validators,, но я не уверен, что это правильный путь или нет. Особенно с созданием объектов из других классов внутри функции и т. Д.

1 Ответ

3 голосов
/ 09 февраля 2010

Вы можете использовать Модель наследования . Вот так:

class BaseDevice(models.Model): #edit: introduced a base class
    hostname = CharField(max_length=45, unique=True, help_text="The hostname for this device")

class Device(BaseDevice):
    pass

class NetDevice(BaseDevice):
    #edit: added attribute
    tracked_item=models.ForeignKey(SomeItem)

class VipDevice(BaseDevice):
    #edit: added attribute
    another_tracked_item=models.ForeignKey(SomeOtherItem)

Не определять BaseDevice как abstract Модель.

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