2016-08-04 8 views
2

Django Version 1.10, Python-Version 3.4Eintrag kann nicht

Ich tippe erstellen und diesen Code in manage.py Shell ausführen:

from tweet.models import Tweet 
tweet = Tweet("Parse JSON like a boss", "Admin") 
tweet.save() 

und empfangen Nachricht mit Fehler:

invalid literal for int() with base 10: 'Parse JSON like a Boss'

Modelle .py:

class Tweet(models.Model): 
    text = models.TextField() 
    pub_time = models.DateTimeField(auto_now_add=True) 
    author = models.CharField(max_length=100) 

    class Meta: 
     ordering = ['-pub_time'] 

Antwort

4

Wenn Sie keine Werte für alle Felder in einem Modell angeben, sollten Sie die Werte senden, die Sie als Namenswertepaare haben.

Tweet(text="Parse JSON like a boss", author="admin") 

in der Tat ist es eine bewährte Methode, das die ganze Zeit zu tun, so dass Änderungen an das Modell in der Zukunft nicht brechen Ihren Code an anderer Stelle. Auch ist es der empfohlene Weg im manual:

To create a new instance of a model, just instantiate it like any other Python class:

class Model(**kwargs)[source]¶ The keyword arguments are simply the names of the fields you’ve defined on your model. Note that instantiating a model in no way touches your database; for that, you need to save().

+0

Und interessante Tatsache: Wenn ich versuche, geben Sie tweet = Tweet (0, "Test", "admin") das ist alles in Ordnung. Vielleicht Problem in ID – MaxTester

+0

Ja, das ist interesting Django war wahrscheinlich Kommissionierung Test für die ID-Feld, aber die empfohlene Möglichkeit, neue Instanzen zu erstellen ist mit Kwargs. Bitte sehen Sie update – e4c5

0

Wenn Sie nicht kwargs verwenden, dann django iteriert über die args Sie in der gleichen Reihenfolge vor, dass die Felder innerhalb des inneren Felder Wörterbuch sind (Source Code),

Es scheint, als ob Sie versuchen, Ihren Text dem ID-Parameter zuzuweisen, der nur ganze Zahlen akzeptiert.

Also ja, wie e4c5 zeigt, sind Sie viel besser mit Kwargen.