Django错误:TypeError:int()参数必须是字符串或数字,而不是“BuildsTable”

2024-05-19 07:07:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将对象保存到数据库,但出现错误:

TypeError: int() argument must be a string or a number, not 'BuildsTable'

我有一个单独的脚本,应该填充我的数据库与许多主板的名称,和价格。在

我的模型.py看起来像这样:

from django.db import models

# Create your models here.

class BuildsTable(models.Model):
    id = models.AutoField(primary_key=True)
    moboListing = models.CharField(max_length=200)
    price = models.IntegerField()

我的数据库填充文件名为填充数据库.py公司名称:

^{pr2}$

如何用主板列表填充数据库?在

我的完整回溯:

Traceback (most recent call last):
  File "fillDB.py", line 40, in <module>
    main()
  File "fillDB.py", line 38, in main
    mydb.save()
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/base.py", line 545, in save
    force_update=force_update, update_fields=update_fields)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/base.py", line 573, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/base.py", line 654, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/base.py", line 687, in _do_insert
    using=using, raw=raw)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/manager.py", line 232, in _insert
    return insert_query(self.model, objs, fields, **kwargs)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 1511, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 898, in execute_sql
    for sql, params in self.as_sql():
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 856, in as_sql
    for obj in self.query.objs
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 350, in get_db_prep
_save
    prepared=False)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 342, in get_db_prep
_value
    value = self.get_prep_value(value)
  File "/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 1073, in get_prep_v
alue
    return int(value)
TypeError: int() argument must be a string or a number, not 'BuildsTable'

Tags: djangoinpyhomedbmodelslocalline
1条回答
网友
1楼 · 发布于 2024-05-19 07:07:57

问题是mydb无法保存,因为您正在将BuildsTable对象设置为一个整数字段。考虑一下这个:

try:
    price_local = BuildsTable(moboListing="%s" % item[1])
except BuildsTable.DoesNotExist:
    price_local = 1
# ...
mydb = BuildsTable(moboListing = mobo, price = price_local)

好了,将price设置为BuildsTable,而不是一个整数。这行不通。在

顺便说一句,您的另一个try-catch也很可疑,您设置mobo = BuildsTable(moboListing="%s" % item[0]),然后使用mobo作为moboListing的值。在

最后,你知道整个脚本是一个肮脏的黑客。从脚本操作Django的正确方法是编写custom Django admin commands。这其实并不难,而且您将获得更健壮、更可靠的解决方案。在

相关问题 更多 >

    热门问题