2016-06-29 5 views
0

Ich mache eine einfache Post und Kommentar page.In diesem, wenn ich einen Beitrag kommentieren ich versuche, diesen Kommentar auf der Datenbank zu speichern Titel des Beitrags, auf dem Kommentar gemacht wird, indem seine id verwendet wird. Aber wenn ich versuche, das post_title Attribut von Post_Comment zu instanziieren, indem ich comments.post_title = header.title mache, gibt es einen Wert eror say Kann "u'kjashdkh '" nicht zuweisen: " Post_Comment.post_title "muss eine" Post "-Instanz sein. Bitte beachten Sie, dass "kjashdkh" der Posttitel ist.Speichern eines Kommentars Objekt zu einem Beitrag in einem Blog in Django-Datenbank

class Post(models.Model): 
    title= models.CharField (max_length=100) 

    body= models.TextField() 

    created=models.DateTimeField() 

    def __str__(self): 
     return self.title 



class Post_Comment(models.Model): 
    comment= models.TextField() 
    post_title=models.ForeignKey(Post) 

Und meiner Meinung nach ist:

def comment(request,pk): 
    header=Post.objects.get(id=pk) 
    comments=Post_Comment(comment=request.POST['comment']) 
    comments.post_title=header.title 
    header.delete() 

    comments.save() 
    return HttpResponseRedirect('/blog/') 
+0

Nun? Der Fehler ist ziemlich klar. Sie haben 'post_title = models.ForeignKey (Post)' gesetzt, so dass es ein 'Post'-Objekt erwartet, aber Sie geben ihm' header.title', was ein 'CharField' oder ein String-Objekt ist. Scheint so, als hättest du ein grundlegendes Missverständnis darüber, wie fremde Schlüssel in Django funktionieren. Hast du das Tutorial gelesen? –

+0

Danke man.Ich bin ein wenig neu bei der Verwendung von Fremdschlüssel.Aber wie soll ich dieses Problem beheben. –

+0

Ich denke, du könntest 'comments.post_title = header', aber du kannst den Blogpost (' header.delete() ') nicht in der nächsten Zeile löschen. Sie sollten genauere Variablennamen in Betracht ziehen. Rufen Sie einen Blog-Beitrag "header" und einen Verweis darauf später "post_title" macht dies sehr verwirrend, um darüber zu begründen. –

Antwort

0
def comment(request,pk): 
    post = Post.objects.get(id=pk) 

    comment = Post_Comment.objects.create(post_title=post, comment=request.POST['comment']) 

    return HttpResponseRedirect('/blog/') 

Vorsicht zu benennen. Ihre Modelle sollten eher wie folgt aussehen:

class Post(models.Model): 
    title = models.CharField(max_length=100) 
    body = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    def __str__(self): 
     return self.title 

class Comment(models.Model): 
    body = models.TextField() 
    post = models.ForeignKey(Post, related_name='comments') 
+0

Ich verstehe nicht, zu welchem ​​Zweck related_name hinzugefügt wird –

+0

Nur für die Bequemlichkeit ... Sie können diesen Namen für die umgekehrten Beziehungen verwenden: 'post.comments.all()'. – ohrstrom

+0

Ja, hab ich. Endlich. Nur noch eine Frage. Ich benutze listview, um alle die letzten Beiträge anzuzeigen, und dafür ist das Abfrage-Set, das ich anbiete, von Post-Modell. Ich frage kann ich die Abfrage auf Post_Comment-Modell setzen und mit seinem Post-Attribut Zugriff auf das Post-Modell Meine Posts und ihre jeweiligen Kommentare werden alle mit einer einzigen URL-Konfiguration angezeigt –

Verwandte Themen