I would like to prevent the form from being saved if the "Oficio" number already existed.
Is there any way to do a data check before saving the data in the database?
If "Oficio" number exists, show error by informing "Existing Oficio Number".
This is my template that insert data:
{% extends 'base.html' %}
{% block body %}
<form action="" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="fieldWrapper form-group">
{{ form.numero.errors }}
<label for="{{ form.numero.id_for_label }}">Número do Ofício:</label>
{{ form.numero }}
</div>
<div class="fieldWrapper form-group">
{{ form.data.errors }}
<label for="{{ form.data.id_for_label }}">Data:</label>
{{ form.data }}
</div>
<div class="fieldWrapper form-group">
{{ form.para.errors }}
<label for="{{ form.para.id_for_label }}">Para:</label>
{{ form.para }}
</div>
<div class="fieldWrapper form-group">
{{ form.cargo_para.errors }}
<label for="{{ form.cargo_para.id_for_label }}">Cargo Para:</label>
{{ form.cargo_para }}
</div>
<div class="fieldWrapper form-group">
{{ form.assunto.errors }}
<label for="{{ form.assunto.id_for_label }}">Assunto:</label>
{{ form.assunto }}
</div>
<div class="fieldWrapper form-group">
{{ form.texto.errors }}
<label for="{{ form.texto.id_for_label }}">Texto:</label>
{{ form.texto }}
</div>
<button class="btn btn-group btn-primary" type="submit">Salvar</button>
<a href="/oficio/">Voltar para a listagem</a>
</form>
{% endblock %}
This is my view:
def novo(request):
if request.method == "POST":
form = FormOficio(request.POST, request.FILES)
if form.is_valid():
item = form.save(commit=False)
item.responsavel = get_object_or_404(Responsavel, usuario=request.user)
item.save()
return render(request, 'salvo.html', {})
else:
form = FormOficio()
context = RequestContext(request)
return render(request, 'novo.html', {'form': form}, context)
This is my model:
class Orgao(models.Model):
nome = models.CharField(max_length=80)
logo = models.ImageField()
cnpj = models.IntegerField()
cidade = models.CharField(max_length=80)
def __str__(self):
return self.nome
class Setor(models.Model):
nome = models.CharField(max_length=80)
endereco = models.TextField()
telefone = models.IntegerField()
orgao = models.ForeignKey(Orgao, on_delete=models.PROTECT)
def __str__(self):
return self.nome
class Cargo(models.Model):
nome = models.CharField(max_length=80)
def __str__(self):
return self.nome
class Responsavel(models.Model):
usuario = models.ForeignKey(User, on_delete=models.PROTECT, default=None)
ramal = models.IntegerField()
setor = models.ForeignKey(Setor, on_delete=models.PROTECT)
cargo = models.ForeignKey(Cargo, on_delete=models.PROTECT)
def __str__(self):
return self.usuario.get_full_name()
class Oficio(models.Model):
data = models.DateTimeField(default=timezone.now)
responsavel = models.ForeignKey(Responsavel, on_delete=models.PROTECT)
para = models.CharField(max_length=80)
cargo_para = models.CharField(max_length=80)
assunto = models.CharField(max_length=80)
texto = models.TextField()
numero = models.IntegerField()
def __str__(self):
return "{} - {}".format(str(self.numero), self.responsavel)
This is what you should do:
1. Get the number that you want to insert from the form
2. In views.py
:
from django.core.exceptions import ObjectDoesNotExist
number = request.POST.get('numero')
try:
n = Oficio.objects.get(numero=number)
# number already exists
return False
except ObjectDoesNotExist:
# number does not exist
oficio = Oficio(numero=number)
oficio.save()
return True
You surely need to change this a lot, but the basic idea remains the same. put the number in the try
block. If it does not exist (which is favorable here), it throws a ObjectDoesNotExist
exception which allows you to save the number knowing it is unique.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments