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>
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
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? –
Pour la question 2: le changement de klas.richting à klas.richting.naam a fonctionné! – EnzoTrompeneers