2016-06-15 3 views
-2

Ich habe versucht, Dokumentation zu folgen, aber ich erhalte immer die Fehlermeldung:Wie bekomme ich eine str von diesem charField?

'issues has no attribute content"

Mein Ziel ist es, dass ich eine temporäre Variable benötigen, um Daten zu halten, bis ich es zu meiner eigentlichen Datenbank-Commit.

Also, beim Lesen des Codes, Inhalt ist im Grunde tmp, und logComments ist, wenn ich es tatsächlich in die Datenbank zu verpflichten. Ich versuche, die Geschichte zu verfolgen, wer was wann bearbeitet hat. Jedoch, immer wenn ich instance.logComments = formIssues.__str__() rufe, bekomme ich diesen Fehler, obwohl ive eine to-string-Methode definiert. Kann jemand darauf hinweisen, wo ich falsch liege?

class issues(ModelForm): 
    content = forms.CharField(widget=forms.Textarea,max_length=500, label='') 

forms.py

def __str__(self): 
    return str(self.content) 

class Meta: 
    model = History 
    fields = ['content'] 
    widgets = {'content': Textarea(attrs={'cols': 50, 'rows': 30})} 
    labels = {'content': ""} 

views.py

formIssues = issues(request.POST or None) 

    #This is for saving the issues textbox 
if request.method == 'POST' and formIssues.is_valid() and 'Submit Issue' in request.POST: 
    #History.logComments = formIssues 
    instance = formIssues.save(commit=False) 
    instance.logComments = formIssues.__str__() 
    instance.projectID = 1337 
    instance.userID = request.user 
    instance.commentType = "Issue" 
    instance.save() 

models.py

class History(models.Model): 

    projectID = models.IntegerField() 
    userID = models.CharField(max_length=10) 
    logComments = models.TextField(max_length=500, default='') 
    commentType = models.CharField(max_length=20, default ='') 
    timeStamp = models.DateTimeField(auto_now_add=True, auto_now=False) 
+0

Warum nicht einfach von den gesäuberten Daten wie gewohnt? – Sayse

+0

Ich bin neu in Django, können Sie bitte erarbeiten? Ich habe das Konzept der gereinigten Daten gehört, aber ich verstehe es nicht wirklich. – Sean

+0

Es wird ausführlich in den [docs] (https://docs.djangoproject.com/en/1.9/topics/forms/) behandelt. – Sayse

Antwort

1

Es gibt eine Reihe von Missverständnissen hier, und es ist schwer zu verstehen, wo Du hast sie von.

Zum einen ist die Fehlermeldung ziemlich klar: Die Methode __str__ Ihres Formulars zeigt auf self.content, aber die Formularklasse hat kein content Attribut. Es hat eine Reihe von Feldern, von denen eine content ist, aber Sie können nicht über self.content; Sie würden es sowieso nicht wollen, da die String-Repräsentation eines Feldes eine HTML-Eingabe ist, so wie das Formular die Felder auf der Vorlage rendert.

Zweitens ist die Dokumentation auch klar darüber, wie Sie tatsächlich auf die übermittelten Daten zugreifen: über das cleaned_data Wörterbuch des Formulars. In Ihrem Fall wäre der Inhaltswert form.cleaned_data['content'].

Aber drittens müssen Sie das sowieso nicht tun. form.save() füllt bereits die Modellinstanz mit den Daten aus dem Formular. Sie müssen es nicht erneut einstellen.

Sie sollten zurückgehen und lesen Sie die Formulardokumentation: Es gibt eine full explanation von, wie Sie ein Formular erstellen und in der Ansicht verwenden.

Schließlich, auch wenn Sie aus irgendeinem Grund auf die Zeichenfolgendarstellung von irgendetwas zugreifen müssen, sollten Sie niemals eine Double-Unterstreichungsmethode direkt aufrufen. Dies geschieht in Python immer über die eingebauten Funktionen: str(formIssues).

Verwandte Themen