我在我的应用程序中有两个操作。首先,我使用特定资源(见下文)将数据导出到CSV,以具有个性化的标题和特定外键的名称,而不是ID。导出CSV文件是可以的。修改后导入...出现错误:完整性错误:(1048,“列”产品标识“不能为空”)
下面是Greffons的资源类,用于获取特定的列名称并对 meta中的列进行排序。
class GreffonResource(resources.ModelResource):
comm = fields.Field(
column_name='Pre-Commandes',
attribute='comm',
)
greffons = fields.Field(
column_name='Greffons',
attribute='greffons',
)
objectif = fields.Field(
column_name='Objectifs',
attribute='objectif',
)
realise = fields.Field(
column_name='Realises',
attribute='realise',
)
reussi = fields.Field(
column_name='Reussis',
attribute='reussi',
)
variete = fields.Field(
column_name='Variete',
attribute='produit__variete',
widget=widgets.ForeignKeyWidget(Produit, 'nom')
)
espece = fields.Field(
column_name='Espece',
attribute='produit__espece',
widget=widgets.ForeignKeyWidget(Produit, 'nom')
)
portegreffe = fields.Field(
column_name='Porte Greffe',
attribute='produit__portegreffe',
widget=widgets.ForeignKeyWidget(Produit, 'nom')
)
produit = fields.Field(
column_name='Produits',
attribute='produit',
widget=widgets.ForeignKeyWidget(Produit, 'id')
)
rang = fields.Field(
column_name='Rangs',
attribute='rang',
)
class Meta:
model = Greffons
fields = ('id', 'produit', 'variete', 'espece', portegreffe', 'comm', 'greffons', 'objectif', 'realise', 'reussi', 'rang')
export_order = ['id', 'produit', 'variete', 'espece', portegreffe', 'comm', 'greffons', 'objectif', 'realise', 'reussi', 'rang']
import_id_fields = ('id', 'produit')
导出CSV文件后,我改变了里面的数据,但错误后导入它:(下面是POST后导入数据的代码。
produit_resource = GreffonResource()
dataset = Dataset()
new_datas = request.FILES['myfile']
imported_data = dataset.load(new_datas.read().decode(), format='csv')
if categorie == "GREFFONS":
result = produit_resource.import_data(imported_data, dry_run=True, raise_errors=True)
[EDIT]:最后,该问题是由于编辑器应用程序在文件结尾后添加了一些空行......
我编辑了我的资源类,以添加一些与产品相关的其他字段......对于导出是可以的,但是当我导入它们时......我得到了两个新错误,这取决于我是否让“produit”进入import_id_fields......
不存在于/produits/import_xls/ Produit匹配查询不存在。
或
在/produits/import_xls/ get()返回的多个对象返回了多个Greffons --它返回了2个!
我检查了,我的列包含唯一ID...
最后,我只需要导出带有ID和其他外键文本值(名称)的文件+从产品ID再次导入...请再次帮助^^
1条答案
按热度按时间5f0d552i1#
很可能是csv中的
Produits.nom
值未Map到单个现有Produit
示例。这将导致创建空值失败。您需要查看导入文件并检查“产品”列的所有值。确保其中的任何值都可以Map到
Produit
表中的nom
条目。是否可能是因为“nom”存在空值,而这些值被解释为NULL?该行声明名为“产品”的csv列将具有Map到
Produit.nom
的值:如果您找不到问题的根源,最好的办法是使用调试器逐步执行导入,这样您应该可以确切地看到问题所在。