Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Douglas42

Formulário de avaliação em Django.

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rafael Castelhano
      Bom dia,
      estou quebrando a cabeça já alguns dias com um problema, estou usando a lib cropper.js para cortar e fazer pequenas edições numa imagem, e ao salvar quero adicionar a imagem editada num input file que será submetido juntamente com o form.
       
      Aparentemente a imagem e corretamente criada e carregada no input, porém no servidor (python/django) está gerando excessão informando que a imagem não é válida ou está corrompida, se eu carrego a mesma imagem gerada manualmente (exporto para disco e carrego novamente) o registro é salvo sem problemas.
       
      // Gerando a imagem e carregando no input let croppedCanvas = this.cropper.getCroppedCanvas(); let data = croppedCanvas.toDataURL(); let file = new File([data], 'foto.png',{type:"image/png", lastModified: new Date().getTime()}); let container = new DataTransfer(); container.items.add(file); this.inputTarget.files = container.files; Existe alguma configuração adicional ao criar o File? 
       
      Se alguem pudar ajudar agradeço.
    • Por Rafael Castelhano
      Boa tarde,
       
      Estou tentando criar uma imagem dinamicamente por javascript e carregá-la no input do formulário, apesar da imagem ser gerada corretamente, ao validar o formulário no python é retornado um erro alegando que o arquivo de imagem é inválido ou está corrompido.
       
      Segue gist com o código:
      https://gist.github.com/castelhano/bd72947e13421606453798bbf219cc74
    • Por Sampaio_bs
      Eae galera, tudo bem ? 

      To tentando realizar um preenchimento de select com ajax, eu diz o titulo, eu seleciono o estado ('uf') e no outro select ele me trás só as cidades pertencentes aquele estado. Só que ele me fala que o cidades não está definida. 

      views.py 
      def Cidades(request): cidades = [] if request.method == 'GET': uf = request.GET.get('uf') for cidade in Municipios.objects.filter(uf__uf=uf).order_by('municipio'): dados = {} dados['pk'] = cidade.id dados['descricao'] = cidade.municipio cidades.append(dados) return JsonResponse(data=cidades, safe=False) return JsonResponse(data=cidades, safe=False)  
      urls.py
      urlpatterns = [ path('cidades/', Cidades, name="listagem_cidades"), ]  
      forms.py
      'uf': forms.Select(attrs={'data-toggle': 'select2', 'class': 'form-control select2-multiple formulario_input', 'onchange': 'cidades()'}),  
      html
      <div class="col-md-2"> <div class="form-group mb-2"> <label for="id_uf" class="col-form-label requiredField"> UF<span class="asteriskField">*</span> </label> {{ form.uf }} </div> </div> <div class="col-md-6"> <div class="form-group mb-2"> <label for="id_cidade" class="col-form-label requiredField"> Cidade<span class="asteriskField">*</span> </label> {{ form.cidade }} </div> </div> <script> $(document).ready(function (){ function cidades() { var vuf = $('#uf_id').val(); $('#cidade_id').select2({ ajax: { url: '/ibge/cidades/', data: {uf: vuf}, processResults: function(data) { console.log(data) // Transforms the top-level key of the response object from 'items' to 'results' return { results: data.items }; } } }); } }) </script> Já inverti os id, e o erro persiste. Alguém poderia me ajudar ? 
       

    • Por Rafael Castelhano
      Olá, nunca fiz consulta com Ajax e estou quebrando a cabeça para atualizar um campo no Django, tenho um template de funcionário e assim que selecionar a matricula quero que busque via ajax o nome do funcionário, segue no link meus arquivos, se alguém puder ajudar agradeço:
       
      https://gist.github.com/castelhano/dcbdbd6bef0d0012efddae544224a5a5
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.