Bonjour à tous.
Veuillez m’excuser si je pose une question complètement idiote ou irrationnelle, mais je débute en programmation et Python + Django sont mes premiers outils...
Je souhaite donc développer un petit site internet pour m’entraîner.
J'ai un système de blog sur mon site internet, et un système de commentaire que peuvent poster les utilisateurs. Malheureusement, je n'arrive pas à lier automatiquement le commentaire à l'article. Pour que cela fonctionne, je suis obliger de rajouter un champs dans le formulaire pour que l'utilisateur rajoute à quel article fait référence le commentaire qu'il post.
C'est bien évidemment idiot, le visiteur commente l'article qu'il lit, il ne dois pas spécifier l'article. Cependant je n'arrive pas à remplir le champs correspondant à ma clé étrangère.
Voici le code de mon fichier blog/views.py :
Le code du models en lien: blog/models.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 # -*- coding: utf-8 -*- from django.http import HttpResponse, Http404, HttpResponseRedirect from django.shortcuts import redirect, render_to_response, render from blog.models import Article, Categorie, Commentaire_Article from django.contrib.auth.models import User from blog.forms import Commentaire_ArticleForm from django.core.context_processors import csrf from django.contrib.auth import authenticate def accueil(request): """ Afficher tous les articles du blog """ articles = Article.objects.all().order_by('-date') # On sélectionne tous nos articles return render(request,'blog/blog.html',{'derniers_articles':articles}) def lire(request, id, slug): #On sélectionne l'article dont l'id à été choisi try: article = Article.objects.get(id=id) except Article.DoesNotExist: raise Http404 #--------------------------------------------- #On affiche les commentaires de l'article commentaires_article=Commentaire_Article.objects.filter(article=id) #--------------------------------------------- #On affiche le formulaire pour rajouter des commentaires if request.method=='POST': form=Commentaire_ArticleForm(request.POST) if form.is_valid(): titre=request.POST.get('titre') contenu=request.POST.get('contenu') article_commente=article.titre Commentaire_Article(titre=titre, contenu=contenu, article=article_commente).save() return render(request,'blog/commenter.html') else: form=Commentaire_ArticleForm() #--------------------------------------------- return render(request,'blog/lire.html',{'article':article, 'commentaires':commentaires_article,'form':form})
Et enfin, et peut-être le plus important, le message d'erreur est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 from django.db import models from django.contrib import admin class Categorie(models.Model): nom = models.CharField(max_length=30) def __unicode__(self): return self.nom class Article(models.Model): titre = models.CharField(max_length=100) slug = models.SlugField(max_length=100) contenu = models.TextField(null=True) date = models.DateTimeField(auto_now_add=True, auto_now=False,verbose_name="Date de parution") categorie = models.ForeignKey(Categorie) def __unicode__(self): return u"%s" % self.titre class Commentaire_Article(models.Model): titre = models.CharField(max_length=100) auteur = models.CharField(max_length=50) contenu = models.TextField(null=True) date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de parution") article = models.ForeignKey(Article) def __unicode__(self): return u"%s" % self.titre
ValueError at /blog/article/4-4eme-article/
Cannot assign "'4eme article'": "Commentaire_Article.article" must be a "Article" instance.
Request Method: POST
Request URL: http://localhost:8000/blog/article/4-4eme-article/
Django Version: 1.5.4
Exception Type: ValueError
Exception Value:
Cannot assign "'4eme article'": "Commentaire_Article.article" must be a "Article" instance.
Je me doute bien que mon erreur est ici, mais cela ne m'aide pas à trouver une solution...
Mais comment faire... je vous remercie d'avance pour tous les conseils que vous aller me donner pour régler le problème, merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 article_commente=article.titre Commentaire_Article(titre=titre, contenu=contenu, article=article_commente).save()
Clément
Partager