Cheguei na ultima aula do curso de Django, mas não nos foi ensinado como editar os perfis, nem todas as etapas da implementação no django do CRUD, pesquisando na internet e ainda sim estou perdido, pois na aplicação que preciso é necessário editar um objeto.
Vejam:
Esse é o Model:
class Atendimento(models.Model):
operador = models.CharField(max_length=25, null=False)
solicitante = models.CharField(max_length=50, null=False)
telefone_solicitante = models.CharField(max_length=16, null=False)
placa = models.CharField(max_length=12, null=False)
frota = models.CharField(max_length=10, null=False)
motivo = models.CharField(max_length=30, null=False)
protocolo = models.CharField(null=False, max_length=30, default=datetime.today().strftime('%d%m%Y%H%M%S'))
data = models.CharField(default=datetime.today().strftime('%d/%m/%Y %H:%M'), max_length=30)
Esse é o forms.py
class AtendimentoForm(forms.ModelForm):
class Meta:
model = Atendimento
fields = ('solicitante', 'telefone_solicitante', 'placa', 'frota', 'motivo', 'protocolo',)
Esse é o novoatendimento.html
{% extends "baseatd.html" %}
{% load bootstrap3 %}
{% block body %}
<form class="form-sigin" action="{% url 'novoatendimento' %}" method="POST">
<h2 class="form-sigin-heading">Novo Atendimento</h2>
{% csrf_token %}
{% bootstrap_form form layout='inline' size='large' %}
<hr/>
<button type="submit" class="btn btn-lg btn-primary"> Salvar </button>
</form>
{% endblock %}
e a view do novo atendimento
def NovoAtendimento(request):
if request.method == "POST":
form = AtendimentoForm(request.POST)
if form.is_valid():
novoatendimento = form.save(commit=False)
novoatendimento.operador = 'Paulo'
novoatendimento.save()
return redirect('index')
else:
form = AtendimentoForm()
return render(request, 'novoatendimento.html', {'form': form})
Essa é a parte de Create, e funciona perfeitamente. A parte Read que é ver os dados também, veja como eu fiz: Tem duas, Uma onde são mostrados todos os atendimentos:
def indexatendimentos(request):
return render(request, 'atendimentos.html', {"atds" : Atendimento.objects.all()} )
atendimentos.html
{% extends "baseatd.html" %}
{% load bootstrap3 %}
{% load staticfiles %}
<link href="{% static "styles/atendimentos.css" %}" rel="stylesheet">
{% block body %}
{% if atds %}
<div class="panel panel-default">
<div class="panel-heading"><strong>TODOS ATENDIMENTOS REALIZADOS</strong>
</div>
<table border="3" class="table table-hover table-bordered">
<thead id="thead-tabela">
<tr>
<th>Operador</th>
<th>Solicitante</th>
<th>Frota</th>
<th>Placa</th>
<th>Protocolo</th>
</tr>
</thead>
<tbody>
{% for atendimento in atds %}
<tr>
<td>{{atendimento.operador}}</td>
<td>{{atendimento.solicitante}}</td>
<td>{{atendimento.frota}}</td>
<td>{{atendimento.placa}}</td>
<td><a href="{% url 'protocolos' atendimento.protocolo %}">{{atendimento.protocolo}}</a></td>
</tr>
</tbody>
{% endfor %}
{% else %}
<p> Ainda não foi realizado nenhum atendimento. </p>
{% endif %}
</table>
</div>
{% endblock %}
e a outra, mais detalhada
A view
def ticket(request, atendimento_protocolo):
e_atendimento = Editar_Atendimento(request, protocoloatd=atendimento_protocolo)
atendimento = Atendimento.objects.get(protocolo=atendimento_protocolo)
return render(request, 'protocolos.html', {"atd" : atendimento, 'e_atendimento' : e_atendimento}, )
o html
{% extends "baseatd.html" %}
{% block body %}
<h4>Protocolo:{{atd.protocolo}}</h1>
<h3></h3>
Operador: {{atd.operador}} <br>
Solicitante: {{atd.solicitante}} <br>
Telefone solicitante: {{atd.telefone_solicitante}}<br>
Placa: {{atd.placa}}<br>
Frota: {{atd.frota}}<br>
Motivo: {{atd.motivo}}<br>
Protocolo: {{atd.protocolo}}<br>
Data: {{atd.data}}<br>
<div>
<a class="btn btn-default" href="{% url 'editaratendimento' protocoloatd=atd.protocolo %}"><span class="glyphicon glyphicon-pencil"></span></a>
</div>
{% endblock %}
Aqui começa a dificuldade, função de editar o atendimento
def Editar_Atendimento(request, protocoloatd):
atendimento = get_object_or_404(Atendimento, protocolo=protocoloatd)
if request.method == "POST":
form = AtendimentoForm(request.POST, instance=atendimento)
if form.is_valid():
atendimento.save()
return redirect('iatendimentos')
else:
form = AtendimentoForm(instance=atendimento)
return render(request, 'novoatendimento.html', {'form': form})
veja, eu instancio o objeto, jogo ele no formulário que eu criei, e vou em Salvar. Porém, ao invés de editar o objeto é criado um novo objeto.
Eu não sei onde estou errando, estou instanciando o objeto editando ele e salvando. Alguém pode me dar uma luz?
Acredito que o erro esteja aqui:
def Editar_Atendimento(request, protocoloatd):
atendimento = get_object_or_404(Atendimento, protocolo=protocoloatd)
if request.method == "POST":
form = AtendimentoForm(request.POST, instance=atendimento)
if form.is_valid():
atendimento.save()
return redirect('iatendimentos')
else:
form = AtendimentoForm(instance=atendimento)
return render(request, 'novoatendimento.html', {'form': form})
def ticket(request, atendimento_protocolo):
e_atendimento = Editar_Atendimento(request, protocoloatd=atendimento_protocolo)
atendimento = Atendimento.objects.get(protocolo=atendimento_protocolo)
return render(request, 'protocolos.html', {"atd" : atendimento, 'e_atendimento' : e_atendimento}, )