При редактировании существующей модели Django мой метод .save() создает правильный объект, но он не сохраняется в базе данных.

У меня есть проект, в котором я хочу дать пользователям возможность обновлять некоторые поля в существующем деле, которое у них есть. Я настроил форму, и она, похоже, работает. Однако, когда я пытаюсь сохранить новую, обновленную дату, метод .save() не работает, как ожидалось. Я выполняю команду x = case.save(), и когда я распечатываю "x", я вижу ожидаемые данные, которые я ввел в форму. Однако сразу после оператора if они не сохраняются. База данных не обновляется. Мысли?

соответствующие методы в views.py:

@login_required(login_url='/accounts/login')     
def stopThrough(request):      
    if request.method == 'POST':
        c = IDForm(request.POST)
        if c.is_valid():
            val = c.cleaned_data['id']
            urlStr = ("/polls/case/edit/" + val)
            return redirect(urlStr)
    cForm = IDForm
    return render(request, 'caseEdit.html', {'start': True, 'cForm' : cForm })
    
@login_required(login_url='/accounts/login') 
def caseEdit(request, id):
    if request.method == 'POST':
        check = CaseForm(request.POST)
        print(check)
        if check.is_valid():
            wtf = check.save()
            return redirect("/polls/case/edit/0")
    c = Case.objects.get(victimID=id)
    cForm = CaseForm(instance=c)
    return render(request, 'caseEdit.html', {'start': False, 'cForm' : cForm  })

Модель случая

class Case(models.Model):
    created_date = models.DateField(auto_now_add=True)
    creator = models.ForeignKey(Organization, on_delete=models.CASCADE, related_name='creator', null=True)
    victimID = models.CharField(max_length=100)
    
    
    #service list functions 
    client_intake = models.BooleanField()
    client_orientation = models.BooleanField()
    criminal_justice_system_based_advocacy = models.BooleanField()
    crisis_intervention_or_24_hour_hotline = models.BooleanField()
    dental = models.BooleanField()
    education = models.BooleanField()
    emotional_moral_support = models.BooleanField()
    employment_assistance = models.BooleanField()
    family_reunification = models.BooleanField()
    financial_assistance = models.BooleanField()
    housing_shelter_advocacy = models.BooleanField()
    house_rental_assistance = models.BooleanField()
    interpreter_translator = models.BooleanField()
    legal_services_general_consultation = models.BooleanField()
    legal_services_immigration = models.BooleanField()
    legal_services_family_law_services = models.BooleanField()
    legal_services_victims_rights_laws = models.BooleanField()
    legal_services_expunging_or_sealing_criminal_records = models.BooleanField()
    legal_services_employment_wage = models.BooleanField()
    legal_services_public_benefits_law = models.BooleanField()
    medical_case = models.BooleanField()
    mental_health_treatment = models.BooleanField()
    ongoing_case_management = models.BooleanField()
    personal_items = models.BooleanField()
    protection_safety_planning = models.BooleanField()
    repatriation = models.BooleanField()
    social_service_advocacy = models.BooleanField()
    substance_abuse_treatment = models.BooleanField()
    transportation = models.BooleanField()
    other = models.BooleanField()

relevant forms.py

        
class IDForm(forms.Form):
    id = forms.CharField(label='SurvivorID', max_length=100) 

class CaseForm(ModelForm):
        class Meta:
                model = Case
                fields = ['creator','victimID','client_intake','client_orientation','criminal_justice_system_based_advocacy','crisis_intervention_or_24_hour_hotline',
         'dental', 'education','emotional_moral_support', 'employment_assistance', 'family_reunification', 'financial_assistance',
        'housing_shelter_advocacy', 'house_rental_assistance', 'interpreter_translator', 'legal_services_general_consultation', 'legal_services_immigration',
        'legal_services_family_law_services', 'legal_services_victims_rights_laws', 
        'legal_services_expunging_or_sealing_criminal_records', 'legal_services_employment_wage', 'legal_services_public_benefits_law', 'medical_case', 
        'mental_health_treatment', 'ongoing_case_management', 'personal_items', 'protection_safety_planning', 'repatriation',
        'social_service_advocacy', 'substance_abuse_treatment', 'transportation','other']
                

Я попробовал использовать UpdateView вместо ручного обновления. Это дало те же результаты. Это вроде бы работало, но на самом деле не обновляло мою базу данных.

views.py

class caseedit(UpdateView):
    model = Case
    fields = ['creator','victimID','client_intake','client_orientation','criminal_justice_system_based_advocacy','crisis_intervention_or_24_hour_hotline',
         'dental', 'education','emotional_moral_support', 'employment_assistance', 'family_reunification', 'financial_assistance',
        'housing_shelter_advocacy', 'house_rental_assistance', 'interpreter_translator', 'legal_services_general_consultation', 'legal_services_immigration',
        'legal_services_family_law_services', 'legal_services_victims_rights_laws', 
        'legal_services_expunging_or_sealing_criminal_records', 'legal_services_employment_wage', 'legal_services_public_benefits_law', 'medical_case', 
        'mental_health_treatment', 'ongoing_case_management', 'personal_items', 'protection_safety_planning', 'repatriation',
        'social_service_advocacy', 'substance_abuse_treatment', 'transportation','other']
    success_url = "/polls/case/edit/0"
  • В вашем методе stopThrough я не увидел метода сохранения после валидации формы
  • .
  • В caseEdit передайте экземпляр в check = CaseForm(request.POST), чтобы он был check = CaseForm(request.POST, instance=c), иначе вы создаете новые объекты вместо редактирования
  • .

Решено... Непонятный метод, на который ссылались в другом месте, имел одну единственную строку с неправильным отступом и возвращал что-то неправильное в конвейере. Если у кого-нибудь еще возникнет такая проблема... я рекомендую смотреть ВЕЗДЕ, куда идет код. Даже самые глупые вещи.

Вернуться на верх