【发布时间】:2013-06-05 02:30:28
【问题描述】:
是否可以在 Django Model Field.choices 中添加变量?
当我必须静态添加它时,我失去了功能。
IP_CHOICES = (
('192.168.1.0', '192.168.1.0'),
)
ip_address = models.IPAddressField(choices=IP_CHOICES, unique=True, blank=True)
我使用名为 IPy 的 Python IP 解释器来计算正确的 IP 块。
ip = IP(self.network + slash)
for rangeip in enumerate(ip[2:-1]):
IP_CHOICES = (
("%s" %rangeip, "%s" %rangeip)
)
这可能吗?如果是这样,请帮助。过去一周一直试图破解它,但无处可去。任何帮助表示赞赏。
请查看模型类。
#IP Block Class
class IP_block(models.Model):
network = models.IPAddressField(unique=True)
slash = models.ForeignKey(Subnet, verbose_name='CIDR')
subnet = models.CharField(max_length=64, blank=True)
gateway_ip = models.CharField(max_length=64, blank=True)
broadcast_ip = models.CharField(max_length=64, blank=True)
ip_range = models.TextField(blank=True, verbose_name='Available IP Range')
dslam = models.ManyToManyField(Dslam, verbose_name='Dslam', blank=True)
#ip block and range save function
def save(self, *args, **kwargs):
slash = unicode(self.slash)
broadcast = IP(self.network + slash).broadcast()
subnet = IP(self.network+slash).strNetmask()
self.broadcast_ip = broadcast
self.subnet = subnet
ip = IP(self.network + slash)
for gateway in ip[1]:
self.gateway_ip = gateway
#rangeip for loop
ip = IP(self.network + slash)
if self.ip_range:
print 'no override'
else:
for rangeip in ip[2:-1]:
self.ip_range += "%s\n" %rangeip
IP_CHOICE = "(%s" %rangeip + ", %s)," %rangeip
#ip_list select
ip_list = models.CharField(choices=IP_CHOICE, max_length=128, blank=True)
super(IP_block, self).save(*args, **kwargs)
class Meta:
verbose_name_plural = 'IP Blocks'
def __unicode__(self):
return self.network
【问题讨论】:
-
您遇到的错误是什么?
IP(self.network + slash)返回什么? -
另外,你可以这样做:
choices = tuple(zip(ip, ip)) -
ip = 192.168.1.0/27 - 这就是 ip 块。
-
但是我想将我的文本字段中的列表添加到选项中。所以继续尝试,我得到 TypeError: zip argument #1 must support iteration。
-
哦.. 我不知道返回类型。在 iPy 中有没有办法将 ips 的范围作为一个列表?
标签: django list model tuples choice