【问题标题】:Cannot create entry无法创建条目
【发布时间】:2016-08-04 07:26:22
【问题描述】:

Django 1.10 版,python 3.4 版

我在 manage.py shell 中键入并执行此代码:

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

并收到错误消息:

以 10 为基数的 int() 的无效文字:'Parse JSON like a Boss'

models.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']

【问题讨论】:

    标签: python django sqlite


    【解决方案1】:

    当您没有为模型中的所有字段指定值时,您应该将您拥有的值作为名称值对发送。

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

    事实上,最好始终这样做,这样以后对模型的更改就不会在其他地方破坏您的代码。这也是manual中推荐的方式:

    要创建模型的新实例,只需像任何实例一样实例化它 其他 Python 类:

    class Model(**kwargs)[source]¶ 关键字参数只是 您在模型上定义的字段的名称。注意 实例化模型绝不会触及您的数据库;为此,你 需要保存()。

    【讨论】:

    • 还有一个有趣的事实:当我尝试输入 tweet = Tweet(0, "Test", "admin") 时,一切正常。可能是 id 的问题
    • 是的,这很有趣 django 可能正在为 id 字段选择测试,但推荐的创建新实例的方法是使用 kwargs。请看更新
    【解决方案2】:

    如果您不使用 kwargs,那么 django 会按照字段在内部字段字典 (Source Code) 中的相同顺序遍历您提供的 args,

    它似乎正在尝试将您的文本分配给 id 参数,该参数只接受整数。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多