2017-01-19 3 views
1

Question 1: Ajout dans Klassen ... cela fonctionne mais dans le html le richting et le leraar est une liste où vous pouvez en choisir un mais il affiche la description complète comme naam et omschrijving. Je veux seulement que ça montre le naam. image add klasDjango CRUD Mettre à jour le modèle qui a des clés étrangères

Question 2: Lorsque j'essaie d'éditer, il me donne une entrée de klas.richting.naam. Mais quand j'essaie de le mettre à jour, il me donne une erreur: image edit error Même quand je ne change rien.

models.py

class Richtingen(models.Model): 
    naam = models.CharField(max_length=100) 
    omschrijving = models.TextField(max_length=2000) 
    def __unicode__(self): 
     return u'%s %s' % (self.naam, self.omschrijving) 
class Leraren(models.Model): 
    naam = models.CharField(max_length=100) 
    voornaam = models.CharField(max_length=100) 
    foto = models.ImageField(upload_to = 'leerkrachten', default='leerkrachten/anoniem.png') 
    email = models.EmailField() 
    def __unicode__(self): 
     return u'%s %s %s %s' % (self.naam, self.voornaam, self.foto, self.email) 

class Klassen(models.Model): 
    naam = models.CharField(max_length=100) 
    numeriekeCode = models.CharField(max_length=100) 
    richting = models.ForeignKey(Richtingen, on_delete=models.CASCADE) 
    leraar = models.ForeignKey(Leraren, on_delete=models.CASCADE) 

    def __unicode__(self): 
     return u'%s %s %s %s' % (self.naam, self.numeriekeCode, self.richting, self.leraar) 

forms.py

class RichtingForm(ModelForm): 
    class Meta: 
     model = Richtingen 
     fields = ['naam', 'omschrijving'] 

class LeraarForm(ModelForm): 
    class Meta: 
     model = Leraren 
     fields = ['naam', 'voornaam', 'foto', 'email'] 

class KlasForm(ModelForm): 
    class Meta: 
     model = Klassen 
     fields = ['naam', 'numeriekeCode', 'richting', 'leraar'] 

views.py

def edit_klassen(request, id): 
    klas = Klassen.objects.get(id=id) 
    edit = True 
    context = {"klas": klas, 
     'edit': edit} 
    return render(request, 'main_app/klassen.html', context) 

def edit_richtingen(request, id): 
    richting = Richtingen.objects.get(id=id) 
    edit = True 
    context = {"richting": richting, 
     'edit': edit} 
    return render(request, 'main_app/richtingen.html', context) 

def edit_leraren(request, id): 
    leraar = Leraren.objects.get(id=id) 
    edit = True 
    context = {"leraar": leraar, 
     'edit': edit} 
    return render(request, 'main_app/leraren.html', context) 

def create_richting(request): 
    form = RichtingForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.save(commit = True) 
    return HttpResponseRedirect('/richtingen') 

def create_leraar(request): 
    form = LeraarForm(request.POST, request.FILES) 
    edit = False 
    if form.is_valid(): 
     form.save(commit = True) 
    return HttpResponseRedirect('/leraren') 

def create_klas(request): 
    form = KlasForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.save(commit = True) 
    return HttpResponseRedirect('/klassen') 

def update_leraren(request, id): 
    Leraren.objects.get(id=id).delete() 
    form = LeraarForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.save(commit = True) 
    return HttpResponseRedirect('/leraren') 


def update_richtingen(request, id): 
    richting = Richtingen.objects.get(id=id) 
    richting.naam = request.POST['naam'] 
    richting.omschrijving = request.POST['omschrijving'] 
    richting.save() 
    edit = False 
    context = {"richting": richting, 
     'edit': edit} 
    return HttpResponseRedirect('/richtingen') 

def update_klassen(request, id): 
    klas = Klassen.objects.get(id=id) 
    klas.naam = request.POST['naam'] 
    klas.numeriekeCode = request.POST['numeriekeCode'] 
    klas.richting = request.POST['richting'] 
    klas.leraar = request.POST['leraar'] 
    klas.save() 
    edit = False 
    context = {"klas": klas, 
     'edit': edit} 
    return HttpResponseRedirect('/klassen') 

klassen.html

#edit 
form class="all_forms" action="../update/{{klas.id}}" method="POST"> 
    {% csrf_token %} 
    <label for="naam">Vak:</label> <input type="text" name="naam" id="naam" value='{{klas.naam}}' placeholder='{{klas.naam}}' /><br> 
    <label for="numeriekeCode">Klaslokaal:</label> <input type="text" name="numeriekeCode" id="numeriekeCode" value='{{klas.numeriekeCode}}' placeholder='{{klas.numeriekeCode}}' /><br> 
    <label for="richting">Richting:</label> <input type="text" name="richting" id="richting" value='{{klas.richting.naam}}' placeholder='{{klas.richting}}' /><br> 
    <label for="leraar">Leraar:</label> <input type="text" name="leraar" id="leraar" value='{{klas.leraar}}' placeholder='{{klas.leraar}}' /><br> 
    <br> 
    <div> 
     <button type="submit" name="submit">Wijzigen</button> 
    </div> 
    </form> 

# create 
<form class="all_forms" action="create_klas/" method="POST"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <div> 
     <button type="submit" name="submit">Verzenden</button> 
    </div> 
</form> 

Répondre

1

Pour la première question que vous devez modifier:

class Richtingen(models.Model): 
    naam = models.CharField(max_length=100) 
    omschrijving = models.TextField(max_length=2000) 
    def __unicode__(self): 
     return u'%s %s' % (self.naam, self.omschrijving) 

à

class Richtingen(models.Model): 
    naam = models.CharField(max_length=100) 
    omschrijving = models.TextField(max_length=2000) 
    def __unicode__(self): 
     return u'%s' % (self.naam) 

Pour le second, vous devez changer la forme et de fournir par exemple Richtingen comme montrer dans l'erreur:

<label for="richting">Richting:</label> <input type="text" name="richting" id="richting" value='{{klas.richting}}' placeholder='{{klas.richting}}' /><br> 
+0

Pour question 1: Cela a fonctionné, mais pouvez-vous m'expliquer parce que sur une autre page j'utilise 'omschrijving' et avec la suppression de la fonction unicode fonctionne toujours pour omschrijving à sur l'autre page. Je me demandais comment ça se fait? – EnzoTrompeneers

+0

c'est juste une méthode avec des résultats de retour avec le codage du système et c'est à vous de décider ce qui sera retourné. Le changement de cette méthode ne devrait influencer aucune fonctionnalité. Qu'en est-il de la deuxième forme? –

+0

Pour la question 2: le changement de klas.richting à klas.richting.naam a fonctionné! – EnzoTrompeneers