1

我在 Django 应用程序中有 3 个模型,每个模型都有一个“主机名”字段。出于多种原因,这些在不同的模型中被跟踪:

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,但我不确定这是否是正确的路径。特别是从函数内的其他类创建对象等。

4

1 回答 1

3

您可以使用模型继承。像这样:

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模型。

于 2010-02-08T23:57:15.777 回答