简而言之,英语不是我的母语
所以我的问题是,我在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。 />
谢谢
答案 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()