Duvida botões numa mesma view

276 views
Skip to first unread message

Michael

unread,
Jun 27, 2011, 6:50:37 PM6/27/11
to Django Brasil
Boa noite gente!

Acho que minha pergunta é meio besta, mas não estou conseguindo
resolver e já to meio sem paciência rsrsrs

Bom, estou com um sistema de artigos, onde o usuário posta qlquer tipo
de artigo. Pois bem, estou adicionar 2 botões ao fim de cada artigo.
Sendo eles: Gostei e Não Gostei, que nada mais são do que 2
contadores. Eles estão funcionando corretamente, mas o problema é que
da maneira que eu fiz, eles ficam na mesma view, e quando eu clico em
um botão, o outro contador acaba sendo incrementado tbm, acredito eu
por estarem no msm method. O problema é que não sei como fazer pra
"separa-los".

Alguem poderia dar uma força?

View:

def artigo(request, slug):
artigo = get_object_or_404(Artigo, slug=slug)

if request.method == 'POST':
form = FormLike(request.POST, instance = artigo)
formhate = FormHate(request.POST, instance = artigo)

if form.is_valid():
form.save(like=artigo.like+1)
if formhate.is_valid():
formhate.save(hate=artigo.hate+1)
else:
form = FormLike(instance = artigo)
formhate = FormHate(instance = artigo)

return render_to_response('blog/artigo.html', locals(),
context_instance=RequestContext(request))

html:

<form method="post">
<table class="form">
{{ form }}
<tr>
<th>&nbsp;</th>
<td><input type="submit" value="{% trans "Gostei" %}"/></td>
</tr>
</table>
</form>

<form method="post">
<table class="formhate">
{{ formhate }}
<tr>
<th>&nbsp;</th>
<td><input type="submit" value="{% trans "Não Gostei" %}"/></td>
</tr>
</table>
</form>

Eu tentei uns negocios doidos, mas nada funcionou.

Obrigado!

Diego Maia

unread,
Jun 27, 2011, 7:17:09 PM6/27/11
to django...@googlegroups.com
pensando rápido aqui, ou vc cria um def pra cada, ou vc envia um dado hidden que identifica qual botão foi clicado.

Acho q esse seria um bom caso para ajax, já que um simples "gostei/não gostei" não precisa mexer com a tela toda.

usando jquery ficaria mais ou menos assim:

<script type="text/javascript">

$(document).ready(function() {
    $('#like_button').click(function() {
        like({% url like %}, this);
    }
    
    $('#dont_like_button').click(function() {
        like({% url dont_like %}, this);
    }
}

like = function(url, button) {
    $.ajax({
        url: url,
        sucess: function() {
            button.addClass("active_choice");
        }
    });
}
</script>

<body>
    <input type="button" id="like_button" value="Gostei" />
    <input type="button" id="dont_like_button" value="Não gostei" />
</body>

Acho q esse código funciona...hehehe, espero que vc seja familiarizado com jQuery.

Abraço.

2011/6/27 Michael <tah...@gmail.com>

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Diego Maia
Desenvolvedor

marcos thomaz

unread,
Jun 27, 2011, 7:32:37 PM6/27/11
to django...@googlegroups.com
Use um único form com dois botões do tipo submit, e, para saber qual foi pressionado, verifique qual botão teve seu valor enviado para validação.
 
[]'s

Marcos Thomaz

De: Diego Maia <diegoc...@gmail.com>
Para: django...@googlegroups.com
Enviadas: Segunda-feira, 27 de Junho de 2011 20:17
Assunto: Re: Duvida botões numa mesma view

Michael Jackson

unread,
Jun 27, 2011, 8:15:34 PM6/27/11
to django...@googlegroups.com
Infelizmente não saco nada de Jquery. E pra começar aprender agora é meio complicado pq estou tentando  aprender django primeiro rsrsrsrs

Marcos, como que eu faço essa verificação? Tem alguma documentação que eu possa dar uma olhada?

Valeu gente!

marcos thomaz

unread,
Jun 27, 2011, 9:24:31 PM6/27/11
to django...@googlegroups.com
Um exemplo bem simples seria, por exemplo, para o html [1]

Note que nesse html tenho 2 elementos submit. Ambos com o atributo name "gravar", porém, com values diferentes.  Na sua View, para saber qual botão foi clicado, bastaria fazer o indicado em [2].

Note que você poderia usar vários botões para executar diversas ações.

[]'s


Marcos Thomaz

De: Michael Jackson <tah...@gmail.com>
Para: django...@googlegroups.com
Enviadas: Segunda-feira, 27 de Junho de 2011 21:15

Assunto: Re: Duvida botões numa mesma view
Infelizmente não saco nada de Jquery. E pra começar aprender agora é meio complicado pq estou tentando  aprender django primeiro rsrsrsrs

Marcos, como que eu faço essa verificação? Tem alguma documentação que eu possa dar uma olhada?

Valeu gente!

Michael Jackson

unread,
Jun 27, 2011, 10:29:49 PM6/27/11
to django...@googlegroups.com
funcionou direitinho!!!  Brigadão!

Abraços.

Michael Jackson

unread,
Jun 28, 2011, 9:01:08 AM6/28/11
to django...@googlegroups.com
Só mais uma pergunta: Se eu quisesse que um usuário só pudesse dar sua opinião 1x em cada post, ql a maneira mais correta de se fazer?

Pq o que tenho em mente seria: cria-se uma lista para cada usuário. Ao clicar em um dos botões, a lista é percorrida e procura-se o id do artigo atual. Se encontrar, é pq ele já opinou, caso contrário, ele ainda pode opinar. Só que não sei se é possível fazer isso, ou se existe algum jeito mais fácil.

Obrigado a todos!

Diego Maia

unread,
Jun 28, 2011, 9:18:21 AM6/28/11
to django...@googlegroups.com
isso mesmo, se o usuário obrigatóriamente estiver logado na hora de opinar, basta vc guardar a opinião dele, daí quando ele exibir o artigo novamente vc pode pode até já mostrar a opinião dele. Assim ele sabe q já opinou e não pode opinar mais.

2011/6/28 Michael Jackson <tah...@gmail.com>
Só mais uma pergunta: Se eu quisesse que um usuário só pudesse dar sua opinião 1x em cada post, ql a maneira mais correta de se fazer?

Pq o que tenho em mente seria: cria-se uma lista para cada usuário. Ao clicar em um dos botões, a lista é percorrida e procura-se o id do artigo atual. Se encontrar, é pq ele já opinou, caso contrário, ele ainda pode opinar. Só que não sei se é possível fazer isso, ou se existe algum jeito mais fácil.

Obrigado a todos!

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Diego Maia
Desenvolvedor
Reply all
Reply to author
Forward
0 new messages