2016-08-04 55 views
2

Django的1.10版,Python版本3.4无法创建条目

I型和执行该代码manage.py壳:

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

,并收到错误消息:

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

模型.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'] 

回答

4

如果您没有为模型中的所有字段指定值,则应该发送您具有名称值对的值。

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

其实,这是做这一切的时候,这样的变化在未来的模型中不别处破坏你的代码的最佳做法。此外它在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

有趣的事实:当我尝试输入 tweet = Tweet(0,“Test”,“admin”) 没关系。也许问题在编号 – MaxTester

+0

是的,这是令人不愉快的django可能是挑选id域的测试,但推荐的方式来创建新的实例与kwargs。请参阅更新 – e4c5

0

如果你不使用kwargs,那么Django的迭代你以相同的顺序提供ARGS的字段是内部字段字典(Source Code),

它似乎在做的是试图将你的文本分配给id参数,它只接受整数。

所以是的,正如e4c5所示,使用kwargs会更好。