用一个Django窗体添加两个对象

2024-10-01 07:42:40 发布

您现在位置:Python中文网/ 问答频道 /正文



只是说,英语不是我的母语。
所以我的问题是,我在Python/Django中有一个表单,它添加了一个带有名称和函数的简单对象,例如:
功能:编程器
姓名:卡洛斯
我想做的是,当用户添加多个具有相同功能的用户时,让事情变得简单,所以我想,当用户这样做时…
功能:编程器
姓名:迪恩、塞思、罗曼、罗斯、乔伊、钱德勒
…我的表单将添加6个对象,但问题是,当我这样做时,python/django总是尝试使用相同的ID/PK(例如:尝试添加ID/PK=1的所有6个成员)。
我做了一点manuever(在巴西我们称之为gambiarra),所以我的代码(在分割对象之后):
form2.name=nombre
form2.pk=初级+1
form2.save()
主要=form2.pk
这基本上包括使用这个称为primary的var来更改PK的值并保存到Postgres。它成功了,现在迪恩是pk/id 1……钱德勒是pk/id 6,而且都是一种形式。
但是,我没有那么幸运,所以当我去添加另一个名字时,比如George,系统会尝试使用pk=2。
有没有人知道没有这个手册就可以解决这个问题,或者如何改进这个手册来彻底解决这个问题?

我的代码(只是提醒一下,我是python初学者):
对象=表单保存(commit=False)
如果','在对象.netaddr:
列表Ips=objnet.netaddr.split文件(',')
codeon=1
诺梅科姆=对象名称
对于列表中的ip:
对象.netaddr=ip
对象名称=nomecomum+“\”+str(codeon)
对象保存()
codeon+=1
其他:
对象保存()

说明:
我有一个带有IP字段(netaddr)和char字段(nome)的表单……如果在IP字段中包含',,它将添加多个对象,例如:
诺姆=卡洛斯
netaddr=2.2.2.2,3.3.3.3
它应该在我的数据库中添加carlos_1,IP为2.2.2.2,carlos_2,IP为3.3.3.3。代码确实做到了这一点,但是,他添加了carlos\u 1,然后,他尝试添加carlos\u 2,他使用相同的PK,所以他没有添加另一个元素,而是覆盖了carlos\u 1,所以在我的数据库中现在只有carlos\u 2。

谢谢


Tags: 对象代码用户功能ip名称表单姓名
1条回答
网友
1楼 · 发布于 2024-10-01 07:42:40

出现这种问题是因为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()

相关问题 更多 >