2017-03-23 8 views
0

Ich versuche, meine DB neu zu initialisieren, und ich habe diesen Fehler:Django DB Fehler mit nicht vorhandener Tabelle

django.db.utils.OperationalError: no such table: app_evaluation

ich mit diesem Namen keine Variable habe, versuche ich db.sqlite3 dele und alle Dateien von Migrationen Ordner und die Migrate laufen und makemigrations Befehl aber nothings arbeitet

models.py

from django.db import models 
from jsonfield import JSONField 
from site_.settings import MEDIA_ROOT 
from django.core.validators import MaxValueValidator 
class Criterion(models.Model): 
    label = models.CharField(max_length=100) 
    def __str__(self): 
     return self.label 
class Candidate(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 = '') 
    higher_education = models.BooleanField(default = False) 
    average = models.IntegerField(default = 0) 
    #############################################################score = models.ForeignKey() 
    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 Evaluation(models.Model): 
    candidate = models.ForeignKey(Candidate, unique=True) 
    #s_candidate = models.CharField(max_length=100) 
    criterion = models.ForeignKey(Criterion, default='') 
    score = models.PositiveIntegerField(default = 0, validators=[MaxValueValidator(10)]) 
    appraiser = models.ForeignKey('auth.User') 
    def __str__(self): 
     return str(self.candidate) 
class avarage(models.Model): 
    eva = Evaluation.objects.get() 

vie w.py

from django.shortcuts import render, get_object_or_404 
from .models import Candidate, Criterion, Evaluation 
from django import forms 
from .forms import CandForm 
from .forms import EvalForm 
from django.shortcuts import redirect 


def canditate_list(request): 
    candidates = Candidate.objects.all() 

    eva = Evaluation.objects.all() 
    eval_cand_list = []          #aqui guarda uma lista com os FK candidates convertidos p/ str 

    context = { 
     'candidates': candidates, 
     'eva': eva 
    } 
    return render(request, 'app/candidate_list.html',context) 

def candidate_detail(request, pk): 
    candidate = get_object_or_404(Candidate, pk=pk) 
    c_name = candidate.name         #pega o nome (string) do candidato 
    c1 = Evaluation.objects.all()       #guarda tds Evaluation na variavel 
    scores = []            #declara a array que vai receber as notas 
    for c in c1:            
     cand = str(c.candidate)        #guarda o nome do candidato do Evaluation atual 
     if cand == c_name:         #confere se o Evaluation atual corresponde ao candidate atual(pk) 
      scores += [c.score] 

    _sum = 0            #variavel que guardara a soma declarada 
    for s in scores: 
     _sum += s           #faz a soma dos scores 

    average = _sum/len(scores)        #tira a média 

    context = { 
     'candidate': candidate, 
     'average': average 
    } 



    return render(request, 'app/candidate_detail.html', context) 

def evaluation(request): 
    if request.method == "POST": 
     form2 = EvalForm(request.POST) 

     if form2.is_valid():  
      post = form2.save(commit=False) 
      post.save() 
      return redirect('canditate_list') 

    else: 
     form2 = EvalForm() 
     return render(request, 'app/evaluation.html', {'criterions': form2,}) 


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

[EDIT]:

Ich versuche, dies zu folgen: How do I drop a table from SQLite3 in DJango? Tipps aber immer die gleichen Fehler.

Antwort

0

Django erstellt Db-Tabellennamen nach Konvention {app_label}_{model_name} (Kleinbuchstaben). Also bezieht es sich auf Evaluation Modell. Das Problem ist in avarage Modell, Sie versuchen, Evaluation.objects.get() in einem Modell zu verwenden, aber zu dieser Zeit ist die Evaluierungsmodelltabelle noch nicht in der Datenbank erstellt. Ich glaube, Sie wollten eine Beziehung erstellen, aber das ist nicht, wie Beziehung funktioniert, was Sie brauchen, ist die ForeignKey

+0

Ich verstehe es! Danke Mann, aber jetzt habe ich ein anderes Problem, das passiert nicht vorher :(: django.db.utils.OperationalError: keine solche Tabelle: app_candidate –

+0

Kein Problem, Sie können eine neue Frage zu Ihrem neuen Problem :) –

+0

Ich konnte Um den Fehler zu korrigieren, war es nicht nötig, die Frage zu posten, danke, mein Freund! –

Verwandte Themen