如何在创建模型时运行方法?

时间:2013-12-19 22:36:10

标签: python django

目前,当创建新的子网时,我正在使用信号来激活我的IP的创建。

但#django中的一些人说更好的方法是创建自定义save()或让表单处理它,如果有ForeingKey。

是否有比使用信号更合适的解决方案?如果是这样,有人可以给我看一个代码示例吗?

我的子网模型(models.py):

class Subnet(models.Model):
    network_address = models.IPAddressField()
    subnet_prefix = models.ForeignKey(SubnetPrefix)

我的IP地址模型(models.py):

class IPAddress(models.Model):
    subnet = models.ForeignKey(Subnet)
    ip_address = models.IPAddressField()
    hostname = models.CharField(max_length=255, null=True, blank=True)

我的信号(models.py):

def subnet_post_save(sender, instance, created, *args, **kwargs):
        # If this is a new object create ip_addresses in IPAddress table
        if created:
            create_ip_addresses(instance)

1 个答案:

答案 0 :(得分:3)

您必须覆盖save方法:

class Subnet(models.Model):
    network_address = models.IPAddressField()
    subnet_prefix = models.ForeignKey(SubnetPrefix)

    def save(self, *args, **kwargs):
        created = not self.pk
        super(Subnet, self).save(*args, **kwargs)
        if created:
            create_ip_addresses(self)