У меня есть форма, в которой я ввожу четыре детали: «Имя персоны», «Ключ персоны», «Метка ключа персоны» и «Значение ключа персоны», и при вводе этих значений я нажимаю кнопку «Отправить», которая генерирует запрос 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, key = 'city' и value = 'New Delhi', а затем я хочу изменить город, поэтому я ввожу name = 'Ankit', key = 'city' и name = 'Lucknow'.При нажатии submit формируются два разных объекта 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)