![](/img/trans.png)
[英]Django TypeError int() argument must be a string or a number, not 'QueryDict'
[英]Django Error: TypeError: int() argument must be a string or a number, not 'BuildsTable'
我正在嘗試將對象保存到數據庫,但出現錯誤:
TypeError: int() argument must be a string or a number, not 'BuildsTable'
我有一個單獨的腳本,應該使用許多主板名稱和價格填充數據庫。
我的models.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()
我的數據庫填充文件稱為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()
如何用主板列表填充數據庫?
我的完整回溯:
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'
問題在於無法保存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
而不是整數。 這行不通。
順便說一句,您的其他嘗試捕獲也是可疑的,您可以在其中設置mobo = BuildsTable(moboListing="%s" % item[0])
,然后將mobo
用作moboListing
的值。
最后,您知道整個腳本是一個骯臟的hack。 從腳本操作Django的正確方法是編寫自定義Django管理命令 。 確實並不難,您將獲得更強大,更可靠的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.