首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法赋值"[u'192.168.99.1',u'192.168.99.1']":"MultiWAN.nameserver“必须是"NameServer”实例

无法赋值"[u'192.168.99.1',u'192.168.99.1']":"MultiWAN.nameserver“必须是"NameServer”实例
EN

Stack Overflow用户
提问于 2012-05-25 19:44:46
回答 2查看 224关注 0票数 0

考虑以下django模型

代码语言:javascript
复制
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中。

代码语言:javascript
复制
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帮助我哪里出错了。

EN

回答 2

Stack Overflow用户

发布于 2012-05-25 20:25:16

您将MultiWAN.nameserver定义为NameServer模型上的外键,因此需要将单个NameServer实例传递给MultiWAN,即:

代码语言:javascript
复制
nameserver = NameServer.objects.create(name="XXX.XXX.XXX.XXX")
mv = MultiWan.objects.create(nameserver=nameserver, ....)

现在,假设您正在传递一个IP地址列表,我猜您搞错了MultiWAN / NameServer关系--看起来您希望NameServer在MultiWAN上有一个外键。

作为附注:您应该使用表单(或ModelForm)来代替,因为它将清理大多数输入并处理验证。

票数 2
EN

Stack Overflow用户

发布于 2012-05-26 02:14:49

正如bruno所说,您必须传递一个NameServer对象,因为您将字段声明为ForeignKeys,而且还要考虑在此之前检查NameServer是否存在。一个不错的做法是使用objects.get_or_create而不是create。

代码语言:javascript
复制
nameserver, is_new = NameServer.objects.get_or_create(name='...')

这样,您将收到名称服务器实例,并且is_new将根据对象是否被创建而为True或False。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10753841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档