由於未知原因,我無法將Item_rarity
表的外鍵實例分配到Detailed_item
表中。 Django拋出一個錯誤:django - 無法分配外鍵
無法分配「u'Basic」「:」Detailed_item.rarity「必須是」Item_rarity「實例。
...但在Item_rarity
字典「基本」記錄存在 - 我可以從管理面板中選擇它,並手動創建Detailed_item
記錄。
我已經定義模式:
class Detailed_item(models.Model):
item_id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
level = models.IntegerField()
icon = models.CharField(max_length=150)
rarity = models.ForeignKey('Item_rarity')
general_type = models.ForeignKey('Item_type')
detailed_type = models.ForeignKey('Item_detailed_type')
class Item_rarity(models.Model):
name = models.CharField(max_length=15, primary_key=True)
class Item_type(models.Model):
name = models.CharField(max_length=15, primary_key=True)
class Item_detailed_type(models.Model):
name = models.CharField(max_length=20, primary_key=True)
在觀點,我嘗試填充它以這種方式(將多個項目):
...
items = get_all_items() #get dict of items
for element in items:
tmp_det_type = ''
for key, val in element.iteritems():
#get 'detailed type' from inner dict
if key == "type":
tmp_det_type = val
item = Detailed_item(
item_id=element['id'],
name=element['name'],
level=element['level'],
icon=element['icon'],
rarity=element['rarity'], #error
general_type=element['type'],
detailed_type=tmp_det_type,
)
item.save()
...
我甚至嘗試硬編碼「基本」的字符串,但它也不起作用。
*解決* 下面的兩個條目,即Item_type
和Item_detailed_type
也無效。 正確的代碼:
from app.models import Detailed_item, Item_rarity, Item_type, Item_detailed_type
...
items = get_all_items() #get dict of items
for element in items:
tmp_det_type = ''
for key, val in element.iteritems():
#get 'detailed type' from inner dict
if key == "type":
tmp_det_type = val
#create objects with string values
obj_rarity = Item_rarity(name=element['rarity'])
obj_item_type = Item_type(name=element['type'])
obj_item_detailed_type = Item_detailed_type(name=tmp_det_type)
item = Detailed_item(
item_id=element['id'],
name=element['name'],
level=element['level'],
icon=element['icon'],
rarity=obj_rarity,
general_type=obj_item_type,
detailed_type=obj_item_detailed_type,
)
item.save()
...
它期待一個對象實例,元素['稀有']的值是什麼? – karthikr
這是一個字符串「Basic」,可以在stdio上打印時沒有問題。 – jligeza
嗯,那麼模型期望一個罕見的實例,其值爲'Basic' – karthikr