考虑以下django模型
class MultiWAN(models.Model):
isp_name = models.CharField(max_length=10)
description = models.TextField(null=True)
ip_address = models.IPAddressField(null=True)
subnet = models.IPAddressField(null=True)
gateway = models.IPAddressField(null=True)
nameserver = models.ForeignKey('NameServer')
weight = models.IntegerField(null=False)
interface = models.CharField(max_length=5)
class NameServer(models.Model):
""" A Isp can have more than one nameserver so far we are declearing a seperate table
"""
name = models.IPAddressField(null=False) 我已经编写了一个相应的视图来接受userr输入并保存到db中。
def multiwan_info_save(request):
# try:
isp_nm = request.POST['ispname_mw']
desc_mw = request.POST['desc_mw']
ip_address_mw = request.POST['ip_address_mw']
subnet_mw = request.POST['subnet_mw']
nameserver_mw = request.POST.getlist('nameserver_mw')
# nameserver2_mw = request.POST['nameserver2_mw']
gateway_mw = request.POST['gateway_mw']
weight_mw = request.POST['weight_mw']
interface_mw = request.POST['interface_mw']
print "+++++++++++++++================="
print nameserver_mw
nmservr = NameServer()
mv = MultiWAN(isp_name=isp_nm,description=desc_mw,ip_address=ip_address_mw,subnet = subnet_mw,gateway=gateway_mw,weight=weight_mw,interface = interface_mw,nameserver = nameserver_mw)
mv.save()
#except:当我试图保存的时候,我得到了上面的错误,.Please帮助我哪里出错了。
发布于 2012-05-25 20:25:16
您将MultiWAN.nameserver定义为NameServer模型上的外键,因此需要将单个NameServer实例传递给MultiWAN,即:
nameserver = NameServer.objects.create(name="XXX.XXX.XXX.XXX")
mv = MultiWan.objects.create(nameserver=nameserver, ....)现在,假设您正在传递一个IP地址列表,我猜您搞错了MultiWAN / NameServer关系--看起来您希望NameServer在MultiWAN上有一个外键。
作为附注:您应该使用表单(或ModelForm)来代替,因为它将清理大多数输入并处理验证。
发布于 2012-05-26 02:14:49
正如bruno所说,您必须传递一个NameServer对象,因为您将字段声明为ForeignKeys,而且还要考虑在此之前检查NameServer是否存在。一个不错的做法是使用objects.get_or_create而不是create。
nameserver, is_new = NameServer.objects.get_or_create(name='...')这样,您将收到名称服务器实例,并且is_new将根据对象是否被创建而为True或False。
https://stackoverflow.com/questions/10753841
复制相似问题