0
I am using a filter to return some student and update their data, but when I try to save I get the following error:
Student with this CPF already exists. and Student with this RA already exists.
My views.py
:
from django.shortcuts import render, redirect
from .models import *
def create_student(request):
form = StudentForm(request.POST or None)
if form.is_valid():
student = Student.objects.filter(cpf=form.cleaned_data['cpf']).filter(ra=form.cleaned_data['ra']) #<------ONDE FAÇO O FILTRO
student.cpf = form.cleaned_data['cpf']
student.ra = form.cleaned_data['ra']
student.takeComputer = form.cleaned_data['takeComputer']
student.computerType = form.cleaned_data['computerType']
student.question = form.cleaned_data['queston']
student.termAccepted = form.cleaned_data['termAccepted']
student = form.save() #<------AQUI EU SALVO ELE
return redirect('registrations:create_student')
return render(request, 'student-form-registration.html', {'form': form})
My Models.py
:
from django.db import models
from django import forms
from django.forms import ModelForm
class Student(models.Model):
cpf = models.CharField(
max_length=14, unique = True, verbose_name = 'CPF')
ra = models.CharField(
max_length=10, unique= True, verbose_name='RA')
takeComputer = models.CharField(
max_length=3, choices=TAKE_COMPUTER_CHOICES, verbose_name='Você levará seu computador pessoal?')
computerType = models.CharField(
max_length=7, choices=COMPUTER_TYPE_CHOICES, verbose_name='Qual o sistema operacional do seu notebook?:', blank=True)
question = models.CharField(
max_length=100, choices=QUESTI0N_CHOICES, verbose_name='Como a habilidade de saber programar pode ajudar minha carreira?'
)
registered = models.BooleanField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
termAccepted = models.BooleanField(default=1, verbose_name='Eu li e aceito o uso da minha imagem')
def __str__(self):
return self.ra
I want to update and not insert
Hello @Thiagoluizs, I’m using
forms.ModelForm
then I even saw something like this that you suggested, but when I do thisform = StudentForm(request.POST or None , instance=student)
I receive the following message:local variable 'student' referenced before assignment'
I’m new to Dan and Python maybe I’m getting lost at some point– Raphael Melo De Lima
@Raphaelmelodelima to use the solution proposed by Thiago, you should put the command
form = StudentForm(...)
after setting the student variable - the error you are referring to happens when trying to use a variable before setting it - change the order of your commands– nosklo