Publicidade

Douglas42

Formulário de avaliação em Django.

Boa tarde pessoal, sou novo no fórum e esse é meu primeiro tópico, curso análise e desenvolvimento de sistemas e estou fazendo um teste para uma vaga de eságio.

O teste consiste no seguinte: eu devo fazer uma aplicação web usando Python3/Django que seja um cadastro para vaga de emprego, a pessoa se registra, põe nome, endereço do Github, Linkedin, Currículo etc. Depois devo fazer com que os avaliadores (usuários admin) possam avaliar esses candidatos de acordo com critérios criados/escolhidos por eles, consegui fazer tudo ok, os models referentes a candidato e a critérios, fiz o formulário de inscrição do candidato salvando os dados e etc no banco de dados devidamente.

Porém estou a dias empacado no segundo formulário que seria o de avaliação do candidato, conforme as recomendações que me deram, eu devo fazer um model que relacione o candidato, o avaliador os critérios e suas notas, a página desse formulário deve exibir os critérios e ao seu lado um campo para receber a nota, por exemplo:

Experiencia: X

 

Eu fiz o model já, mas o que não faço a minima ideia de como fazer é vincular os critérios a uma nota, eu criei um atributo que seria o campo que recebe a nota e outro que recebe o critério, só que como eu faço para vincular o atributo que recebe o critério com o que recebe a nota, quero dizer, para que eu posso dizer ao banco de dados: Este critério x recebe essa nota, os atributos já estão criados, só não estão vinculados como deve ser.

 

aqui vai meus models/views/froms.py:

 

models.py:

 

from django.db import models
from jsonfield import JSONField
from site_.settings import MEDIA_ROOT

class Criterio(models.Model):
	label = models.CharField(max_length=100)

	def  __str__(self):
		return self.label

class Candidato(models.Model):
	name = models.CharField(max_length=100)
	e_mail = models.EmailField(max_length=100, default = '')
	github = models.URLField(default = '')
	linkedin = models.URLField(max_length=100, default = '')
	cover_letter = models.TextField(default = '')
	Ensino_superior = models.BooleanField(default = False)
	med = models.IntegerField(default = 0)
	#talvez tenha que alterrar essa linha
	docfile = models.FileField(upload_to='/home/douglas/Documentos/Django/my-second-blog/site_/media', null=True, blank=True)

	def  __str__(self):
		return self.name

class Aval(models.Model):
	criterio = models.ManyToManyField(Criterio)
	nota = models.IntegerField()

	def  __str__(self):
		return self


class Avaliacao(models.Model):
	candidato = models.ForeignKey(Candidato)
	criterio = models.ForeignKey(Criterio)
	nota = models.IntegerField(default = 0)
	avaliador = models.ForeignKey('auth.User')
	#aval = models.ForeignKey(Aval)

	def  __str__(self):
		return self


views.py

from django.shortcuts import render, get_object_or_404
from .models import Candidato, Criterio
from django import forms
from .forms import CandForm
from .forms import AvalForm
from django.shortcuts import redirect

def canditato_list(request):
    candidatos = Candidato.objects.all()
    return render(request, 'app/candidato_list.html', {'candidatos': candidatos})

def candidato_detalhe(request, pk):
    candidato = get_object_or_404(Candidato, pk=pk)
    return render(request, 'app/candidato_detalhe.html', {'candidato': candidato})

def avaliar(request):
    criterios = Criterio.objects.all()
    form2 = AvalForm()
    return render(request, 'app/avaliacao.html', {'criterios': form2})

def cadastrar(request):
    if request.method == "POST":
        form = CandForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('candidato_detalhe', pk=post.pk)
    else:
        form = CandForm()
    return render(request, 'app/cadastro.html', {'form': form})

 

forms.py

from .models import Candidato, Avaliacaofrom django import forms

class CandForm(forms.ModelForm):
    class Meta:
        model = Candidato
        fields = ('name', 'e_mail', 'github', 'linkedin', 'Ensino_superior','cover_letter')

class AvalForm(forms.ModelForm):
    class Meta:
        model = Avaliacao


Então é isso pessoal, eu preciso é vincular duas variáveis do mesmo modelo.

PS: eu quero e preciso muito desse emprego.

 

Obrigado de coração, qualquer dica mínima que seja é muito bem vinda.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora

  • Próximos Eventos

  • Conteúdo Similar

    • Por BrunoMs
      Fala pessoal, tudo joia?
      A duvida que tenho acredito que a grande maioria já viu acontecer.
      Quando enviamos dados via formulários, GET ou POST, e quando é clicado no F5 os dados são enviados novamente, ou seja, se enviarmos um email via GET ou POST na página "enviar-email.php" e o form nos envia para "email-enviado-com-sucesso.php", se darmos f5 nessa página aquele mesmo email que já foi enviado é enviado novamente quantas vezes o usuário quiser.
       
      É possível barrar isso de alguma forma?
       
      Valeu pessoal, abração e fiquem com Deus.
    • Por matheusconcerto
      Olá , estou desenvolvendo uma aplicação móvel utilizando Xamarin Forms, e gostaria de saber se para aplicações comercial, como seria feito da forma mais segura a conexão com banco de dados. Pois é possível conectar direto no código passando as infos de conexão, mas também há a possibilidade de conectar passando os dados para um servidor, e este se conectando ao banco. Gostaria de saber qual seria a forma mais segura, ou se há outra forma fora essas 2 para fazer essa conexão.
    • Por Anderson Cruz
      Bom Dia,
       
      Estou começando a trabalhar com PHP e desenvolvimento. E estou criando um formulário para de alteração de dados vindas do banco, crie um select que deveria vir a opção já gravada no banco e ao clicar em uma imagem a opção select se expandiria para o usuário escolher qual opção e gostaria de alterar. Mas não estou conseguindo fazer com que a informação que venha do banco desapareça e o select list as opções. Segue o código abaixo:
      Estou tentando fazer isso no id="progtab_tab"
       
      <tr>
      <td><br> <form id="frm" name="frm" action="save_programa_x_tabela.php" method="POST"> <input type="hidden" id="tip_act" name="tip_act" value=""> <table width="600px"> <tr> <td class="txt_11" width="100px"><b>Número:</b></td> <td class="txt_11" colspan="2"><?=$nrSeq?><input type="hidden" name="nrseqprg" value="<?=$nrSeq?>"></td> </tr> <tr> <td class="txt_11"><b>Nome do programa:</b></td> <td class="txt_11"> <select id="nrseqprg" name="nrseqprg" ><span style= "vertical-align:super;"></span><img src="./img/bot_editar.gif" width="20px" onclick="tran_edit(this.id,1)" ></span> <?php $SQL = "select distinct tecnicot004.nrseqprg,tecnicot004.nmprg from tecnicot004, tecnicot011 "; $rs = getInfo($SQL, 'NAME'); foreach($rs as $pos=>$val){?> <option value="<?=$val[0]?>"><?=$val[1]?></option> <?php }?> </select> </td> </tr> <tr id="progtab_tab"> <td class="txt_11" valign="top" width="180px"><b>Nome da Tabela:</b></td> <td class="txt_11"> <input type="text" name="nmtab" size="30" onclick="tran_edit(this.id,1)"> <select id="tab_txt" style="display:inline;"> <span style="vertical-align: super;"> <?php $SQL = "select distinct tecnicot009.nrseqtab,tecnicot009.nmtab from tecnicot009, tecnicot011 "; $rs = getInfo($SQL); foreach($rs as $pos=>$val){?> <option value="<?=$val[0]?>"><?=$val[1]?></option> <?php }?> </select> </span> </td> </tr> <tr> <td colspan="2"> </td> </tr> <tr> <td colspan="2" align="right"><button id="btn_alt" class="borda" style='display:none;' onclick="setAct('alt')">Alterar</button> | <button class="borda" onclick="document.getElementById('display_conf').style.visibility = 'visible'; document.getElementById('display_conf').style.display = 'block'; return false;">Excluir</button></td> </tr> </table> <div id="display_conf" style="position:absolute; top:40%; left:40%; height: 70px; width: 250px; visibility:hidden; display:none; background-color: #0C0; "> <table> <tr> <td colspan='2'>Confirma Exclusão?</td> </tr> <tr> <td><button class="borda" onclick="setAct('exc');">Sim</button></td> <td><button class="borda" onclick="document.getElementById('display_conf').style.visibility = 'hidden'; document.getElementById('display_conf').style.display = 'none'; return false;">Não</button></td> </tr> </table> </div> </form>
       
      <script> function tran_edit(id, tipo){ var fieldId = id.split("_"); document.getElementById('btn_alt').style.display = 'inline'; document.getElementById(id).style.display = 'none'; if(tipo==1){ document.getElementById(fieldId[0]+"_tab").style.display = 'none'; } document.getElementById(fieldId[0]).style.display = 'inline'; } function setAct(act){ document.getElementById('tip_act').value = act; } </script>  
      Obrigado.
       
       
    • Por tognere
      Boa noite...minha dúvida é retardada...eu não to conseguindo fazer um coisa simples...um link externo no template do django...
      <a href="www.google.com">Google</a> mas se eu passar o mouse em cima desse link fica o caminho: http://localhost:8000/artigos/www.google.com
       
      alguem q ja passou por esse problema poderia me ajudar? desde já agradeço! :)
    • Por tognere
      Olá...estou criando uma aplicação...que na página principal(index) terá apenas um menu...ex: quem sou , contato, etc...
       
      e com issu...naum vejo o pq de eu precisar criar o fluxo...url > view > template ....já q na view só estará apontando para o template...
       
      urls.py
      from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^$','minha_aplicacao.views.home'), url(r'^admin/', admin.site.urls), ] views.py
      from django.shortcuts import render from django.http import HttpResponse def home(request): return render(request,'home.html') OBS: ta funcionando...porém eu naum quero usar a views....quero chamar o template home.html direto da urls...como proceder? alguem pode me dar alguma dica...?....desde já agradeço... obrigado