【发布时间】:2016-01-01 07:22:34
【问题描述】:
下面的配置模型允许上传 .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.')
我扩展了该类的默认 SAVE 模型方法以允许处理 .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.
感谢任何有助于解决此问题的帮助。提前致谢。
【问题讨论】:
标签: database methods django-models insert instance