Джанго: Не выбирает тот же объект - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть форма, в которой я ввожу четыре детали: «Имя персоны», «Ключ персоны», «Метка ключа персоны» и «Значение ключа персоны», и при вводе этих значений я нажимаю кнопку «Отправить», которая генерирует запрос 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)

1 Ответ

0 голосов
/ 10 декабря 2018
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 на новую персону, которая сохраняется в БД.После каждой попытки редактирования вы продолжаете получать новую запись.

...