我有一个表单,我在其中输入四个详细信息:“个性化名称”,“个性化密钥”,“个性化密钥标签”和“个性化密钥值”,并在输入这些值时按“提交”按钮,该按钮在上生成GET请求我的服务器。
以下是django视图:-
def PersonaSave(request):
persona_name = request.GET.get('persona_name',)
persona_key = request.GET.get('key_name',)
persona_key_value = request.GET.get('key_value',)
persona_key_label = request.GET.get('key_label',)
persona_submit = request.GET.get('Save',)
return( persona_name , persona_key , persona_key_label , persona_key_value , persona_submit )
def TestPageView(request):
x=PersonaSave(request)
persona_name = x[0]
persona_key = x[1]
persona_key_label=x[2]
persona_key_value=x[3]
persona_submit=x[4]
if(persona_name is None and persona_key is None and persona_key_label is None and persona_key_value is None):
return render(request, 'dashboard/test_page.html')
elif TestPersonaName.objects.filter(name=persona_name).exists():
t= TestPersonaName.objects.get(pk=persona_name)
testpersona = TestPersona.objects.get(name=t)
if testpersona.key == persona_key:
testpersona.label= persona_key_label
testpersona.value = persona_key_value
t=TestPersonaName(name=persona_name)
t.save()
testpersona = TestPersona(name=t,key=persona_key,label=persona_key_label,value=persona_key_value)
testpersona.save()
return render(request,'dashboard/test_page.html')
我正在重写行代码,以使更新和新角色形成开始保持问题的清晰性。
更新功能从此处开始-----
elif TestPersonaName.objects.filter(name=persona_name).exists():
t= TestPersonaName.objects.get(pk=persona_name)
testpersona = TestPersona.objects.get(name=t)
if testpersona.key == persona_key:
testpersona.label= persona_key_label
testpersona.value = persona_key_value
-----这是更新功能结束的地方
如果角色名称不同,则将形成新的TestPersonaName对象和TestPersona对象。
为此,功能从此处开始----
t=TestPersonaName(name=persona_name)
t.save()
testpersona = TestPersona(name=t,key=persona_key,label=persona_key_label,value=persona_key_value)
testpersona.save()
----并在此处结束。
现在,问题在于相同的角色名称和相同的角色密钥正在形成两个不同的TestPersona对象。例如,如果我输入persona_name = Ankit, 键=“城市”,值=“新德里”,后来我想更改城市,所以我输入 name ='Ankit',键='city',name ='Lucknow'。在按下提交时,将形成两个不同的TestPersona对象。即
object1(name='Ankit',key='city', value='New Delhi') and
object2(name='Ankit',key='city',value='Lucknow')
理想情况下应该是:-
object1(name='Ankit', key='city', value='Lucknow')
以下是TestPersonaName和TestPersona模型:-
class TestPersonaName(models.Model):
name = models.CharField(max_length=100,primary_key=True)
class TestPersona(models.Model):
name = models.ForeignKey('TestPersonaName',on_delete=models.CASCADE)
key = models.CharField(max_length=200)
label = models.CharField(max_length=200,null=True,blank=True)
value = models.CharField(max_length=200)
答案 0 :(得分:1)
elif TestPersonaName.objects.filter(name=persona_name).exists():
t= TestPersonaName.objects.get(pk=persona_name)
testpersona = TestPersona.objects.get(name=t)
if testpersona.key == persona_key:
testpersona.label= persona_key_label
testpersona.value = persona_key_value
您也需要像上面return
那样保存角色和if
。否则,解释器将退出此块并继续
t=TestPersonaName(name=persona_name)
t.save()
testpersona = TestPersona(name=t,key=persona_key,label=persona_key_label,value=persona_key_value)
testpersona.save()
,它将t
的值替换为保存到数据库的新角色。每次尝试编辑后,您都会继续获得新记录。