目前,当创建新的子网时,我正在使用信号来激活我的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)
答案 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)