使用一个django表单添加两个对象

时间:2015-10-24 16:03:45

标签: python django django-forms primary-key increment



简而言之,英语不是我的母语 所以我的问题是,我在Python / Django中有一个表单,它添加了一个名称和功能的简单对象,例如:
功能:程序员
姓名:Carlos
我想做的是当用户添加具有相同功能的多个用户时为用户简化,所以我想,当用户做这样的事情时...... 功能:程序员
姓名:Dean,Seth,Roman,Ross,Joey,Chandler
...我的表单会添加6个对象,但问题是当我这样做时,python / django总是尝试使用相同的ID / PK(例如:尝试添加id / pk = 1的所有6个成员)。登记/> 我做了一点manuever(在巴西,我们称之为gambiarra),所以我的代码执行此操作(分割对象后):
form2.name = nombre
form2.pk = primary + 1
form2.save()
初级= form2.pk
这基本上包括使用这个名为primary的var来改变PK的值并保存到Postgres。它有效,现在Dean是pk / id 1 .... Chandler是pk / id 6,并且都是一种形式 但是,我没有那么幸运,所以当我去添加另一个名字时,如乔治,系统会尝试使用pk = 2。
有没有人知道没有这个manuever解决这个问题或如何改善这个manuever完全解决?

我的代码(只是提醒一下,我是初学者):
objnet = form.save(commit = False)
       如果','在objnet.netaddr中:
               listaips = objnet.netaddr.split(',')
               codeon = 1
               nomecomum = objnet.nome
               for list in listaips:
                     objnet.netaddr = ip
                     objnet.nome = nomecomum +“_”+ str(codeon)
                     objnet.save()
                     CODEON + = 1个
       其他:
                    objnet.save()

说明:
我有一个带有IP字段(netaddr)和字段(nome)的表单....如果在IP字段中包含',',它将添加多个对象,例如:
nome = carlos
netaddr = 2.2.2.2,3.3.3.3
它应该在我的数据库中使用IP 2.2.2.2添加carlos_1,使用IP 3.3.3.3添加carlos_2。而代码确实这样做了,但是,他添加了carlos_1然后,他尝试添加carlos_2,他使用相同的PK,所以不是添加另一个元素,而是覆盖carlos_1,所以在我的DB中现在只有carlos_2。 />

谢谢

1 个答案:

答案 0 :(得分:0)

你有这样的问题,因为objnet总是链接到一个对象(因为form.save()返回对象)

快速修复:

if ',' in objnet.netaddr:
    listaips = objnet.netaddr.split(',')
    codeon = 1

    for ip in listaips:
        objnet = form.save(commit=False)
        objnet.netaddr = ip
        objnet.nome = objnet.nome + "_" + str(codeon)
        objnet.save()

        codeon+=1
else:
    form.save()