Django 模型方法数据库提交失败

django model method fails database commit

下面的配置模型允许上传 .ZIP 并将提取的网络设备 .TXT 文件绑定到设备配置的来源位置。

class Configuration(models.Model):
    configfile = models.FileField('Configuration File Upload', upload_to='somecompany/configs/', help_text='Select a .ZIP file which contains .TXT file configuration dumps from devices which belong to a single location.')
    location_name = models.ForeignKey('Location', help_text='Associate the .ZIP file selected above to the location from which the device .TXT file configuration dumps were taken.')

我扩展了 class 的默认保存模型方法以允许处理 .ZIP(为简洁起见未显示代码)。我已经解析了提取的 .TXT 文件,将所有需要的信息收集到变量中,并且我试图将该信息插入到我的数据库中,但它失败了。具体来说,下面我展示了从一个提取的 .TXT 文件中收集的所有值的示例(为保护隐私而略微修改)以及我对数据库插入的尝试:

dbadd_ln = 'Red Rock'
dbadd_dn = 'DEVICE4'
dbadd_manu = 'cisco'
dbadd_os = 'nxos'
dbadd_dt = '-'
dbadd_prot = '-'
dbadd_cred = '-'
dbadd_ser = 'ABCD1234'
dbadd_addr = '10.10.10.10'
dbadd_model = 'N7K-C7010'
dbadd_ram = '2048256000'
dbadd_flash = '1109663744/1853116416'
dbadd_image = 'n7000-s1-dk9.5.2.9.bin'
dbadd = Device(location_name=dbadd_ln, device_name=dbadd_dn, device_type=dbadd_dt, protocol=dbadd_prot, credential=dbadd_cred, serial=dbadd_ser, address=dbadd_addr, manufacturer=dbadd_manu, model=dbadd_model, ram=dbadd_ram, flash=dbadd_flash, os=dbadd_os, image=dbadd_image)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "c:\code-projects\MYVIRTUALENV\lib\site-packages\django\db\models\base.py", line 431, in __init__
    setattr(self, field.name, rel_obj)
  File "c:\code-projects\MYVIRTUALENV\lib\site-packages\django\db\models\fields\related_descriptors.py", line 207, in __set__
    self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "'Red Rock'": "Device.location_name" must be a "Location" instance.

'Red Rock' 是我的数据库中已存在的合法位置条目...

>>> Location.objects.filter(location_name='Red Rock')
[Location: Red Rock]

...所以我想我不清楚这到底是什么意思:

"Device.location_name" must be a "Location" instance.

感谢任何有助于解决此问题的帮助。提前致谢。

进行了更多搜索,发现了这个:

Cannot assign "u''": "Company.parent" must be a "Company" instance

现在我明白了。当我创建一个实例时,我忽略了我所描述的特定错误。现在开始解决下一个问题。 :)