Django错误:TypeError:int()参数必须是字符串或数字,而不是“BuildsTable” [英] Django Error: TypeError: int() argument must be a string or a number, not 'BuildsTable'

查看:201
本文介绍了Django错误:TypeError:int()参数必须是字符串或数字,而不是“BuildsTable”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



TypeError:int()参数必须是一个字符串或数字,而不是BuildsTable



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



我的models.py看起来像这样:

  from django。 db进口模型

#在这里创建您的模型。

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

我的数据库填充文件称为fillDB.py:

  import sys 
import os


如果__name__ ==__main__:
sys.path.append('/ home / waleedasif322 / Documents / cb / computerbuilder_masterrepo / computerbuilder /')
os.environ.setdefault(DJANGO_SETTINGS_MODULE,computerbuilder.settings)

从builds.models import buildsTable

mobo = BuildsTable.objects.all()
打印mobo

moboDB = open(db.txt,r )
lines = moboDB.read()。split('\,')
打印行

def main():
全局行
全局BuildsTable

行项目:
try:
mobo = BuildsTable(moboListing =%s%item [0])
except Bu ildsTable.DoesNotExist:
mobo = 1
try:
price_local = BuildsTable(moboListing =%s%item [1])$ ​​b $ b除了BuildsTable.DoesNotExist:
price_local = 1

if(BuildsTable.objects.filter(
moboListing = mobo,price = price_local).exists()== False):

mydb = BuildsTable(moboListing = mobo,price = price_local)

打印mydb
mydb.save()

main()

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



我的完整追溯:

 追溯(最近的最后一次调用):
文件fillDB.py,行40,在< module>
main()
文件fillDB.py,第38行,主要
mydb.save()
文件/ home / waleedasif322 / Documents / cb / computerbuilder_masterrepo / cbenv /local/lib/python2.7/site-packages/django/db/models/base.py,第545行,保存
force_update = force_update,update_fields = update_fields)
文件/ home / waldeasif322 / Documents / cb / computerbuilder_masterrepo / cbenv / local / lib / python2.7 / site-packages / django / db / models / base.py,第573行,在save_base
已更新= self._save_table(raw, cls,force_insert,force_update,using,update_fields)
文件/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/base.py ,第654行,_save_table
result = self._do_insert(cls._base_manager,using,fields,update_pk,raw)
文件/ home / waleedasif322 / Documents / cb / computerbuilder_masterrepo / cbenv / local / lib / python2.7 / site-packages / django / db / models / base.py,第687行,_do_insert
using = using,raw = raw)
文件/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/manager.py,第232行,_insert
return insert_query(self.model,objs,fields,** kwargs)
文件/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django /db/models/query.py,第1511行,insert_query
return query.get_compiler(using = using).execute_sql(return_id)
文件/ home / waleedasif322 / Documents / cb / computerbuilder_masterrepo / cbenv / local / lib / python2.7 / site-packages / django / db / models / sql / compiler.py,行898,在execute_sql
中为sql,params in self.as_sql():
文件/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py,第856行,as_sql
for obj in self.query.objs
文件/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-pac kages / django / db / models / fields / __ init__.py,第350行,get_db_prep
_save
prepared = False)
文件/ home / waleedasif322 / Documents / cb / computerbuilder_masterrepo / cbenv / local / lib / python2.7 / site-packages / django / db / models / fields / __ init__.py,第342行,get_db_prep
_value
value = self.get_prep_value(value)
文件/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/cbenv/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py,第1073行,在get_prep_v
alue
返回int(value)
TypeError:int()参数必须是字符串或数字,而不是BuildsTable


解决方案

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

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

您可以将价格设置为 BuildsTable 而不是整数。这将无法正常工作。



您的其他try-catch也是可疑的,您设置的位置 mobo = BuildsTable(moboListing =%s %item [0]),然后再使用 mobo 作为 moboListing



最后,你知道整个脚本是一个脏的黑客。从脚本中操作Django的正确方法是编写自定义Django管理命令。这真的不难,你会得到更强大和可靠的解决方案。


I'm trying to save an object to the database but I get the error:

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

I have a separate script that is supposed to populate my database with many names of motherboards, and prices.

My models.py looks like this:

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()

My database populating file is called fillDB.py:

import sys
import os


if __name__ == "__main__":
    sys.path.append('/home/waleedasif322/Documents/cb/computerbuilder_masterrepo/computerbuilder/')
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "computerbuilder.settings")

    from builds.models import BuildsTable

    mobo = BuildsTable.objects.all()
    print mobo

moboDB = open("db.txt", "r")
lines = moboDB.read().split('\",')
print lines

def main():
    global lines
    global BuildsTable

    for item in lines:
        try:
            mobo = BuildsTable(moboListing="%s" % item[0])
        except BuildsTable.DoesNotExist:
            mobo = 1
        try:
            price_local = BuildsTable(moboListing="%s" % item[1])
        except BuildsTable.DoesNotExist:
            price_local = 1
        """    
        if(BuildsTable.objects.filter(
            moboListing = mobo, price = price_local).exists() == False):
        """
        mydb = BuildsTable(moboListing = mobo, price = price_local)

        print mydb
        mydb.save()

main()

How can I populate my database with a list of motherboards?

My full traceback:

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'

解决方案

The problem is that mydb cannot be saved, because you're setting a BuildsTable object to an integer field. Consider this:

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

There you go, setting price to a BuildsTable instead of an integer. This won't work.

Btw your other try-catch is suspicious too, where you set mobo = BuildsTable(moboListing="%s" % item[0]), and then later use mobo as the value of moboListing.

Finally, you know that the whole script is a dirty hack. The right way to manipulate Django from scripts is to write custom Django admin commands. It's really not harder, and you'll get more robust and reliable solutions.

这篇关于Django错误:TypeError:int()参数必须是字符串或数字,而不是“BuildsTable”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆