Django:未获取相同的对象

时间:2018-12-10 14:41:42

标签: django django-models django-views

我有一个表单,我在其中输入四个详细信息:“个性化名称”,“个性化密钥”,“个性化密钥标签”和“个性化密钥值”,并在输入这些值时按“提交”按钮,该按钮在上生成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)

1 个答案:

答案 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的值替换为保存到数据库的新角色。每次尝试编辑后,您都会继续获得新记录。