问题描述
尝试将 csv 数据导入我的 django 应用程序模型时,我遇到了问题...我尝试使用脚本并通过 django-import-export。我只会在后面详细说明,以免在空间中到处乱跑。
我的绘画模型几乎没有外键,我无法映射到我的模型,因为我也将它们导入到 CSV 文件中,即它们尚未创建。 我怎样才能克服它?这就是我如何将 Paint 实例映射到外键名称而不是尚未创建的 ID?
为了测试,我手动为 eht 外键创建了一些条目,并将它们的 ID 整数添加到我的 CSV 中。我注意到我只能导入第一个外国 hey 值。其他的不出现,例如画家 ID 显示在预览和最终导入中,但类别不是。 这是我的第二个问题:如何从同一个 CSV 文件中导入多个外键?
这是我的代码:
class Painter(models.Model):
"""Model representing a painter."""
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
date_of_birth = models.DateField(null=True,blank=True)
date_of_death = models.DateField('died',null=True,blank=True)
def __str__(self):
"""String for representing the Model object."""
return f'{self.last_name},{self.first_name}'
class Painting(models.Model):
'''Model representing a painting'''
title = models.CharField(max_length=200)
painter = models.ForeignKey('Painter',on_delete=models.CASCADE,default=1)
medium = models.ForeignKey(Medium,on_delete=models.SET_NULL,blank=True,null=True)
support = models.ForeignKey(Support,null=True)
category = models.ForeignKey(Category,related_name='categories',null=True)
....
lass Category(models.Model):
name = models.CharField(
max_length=200,help_text="Enter the painting's category (e.g. Sketch,Study,Drawing,Painting,etc.)"
)
def __str__(self):
...
Admin.py
from import_export.admin import ImportExportModelAdmin
from django.contrib import admin
from import_export import resources,fields
from import_export.widgets import ManyToManyWidget,ForeignKeyWidget
from .models import Painter,Medium,Support,Category,Location,Tag
from django_admin_inline_paginator.admin import TabularInlinePaginated
admin.site.register(Medium)
admin.site.register(Support)
admin.site.register(Category)
admin.site.register(Location)
admin.site.register(Tag)
class PaintingsAdminInline(TabularInlinePaginated):
# fields = (...)
per_page = 3
model = Painting
class PainterResource(resources.ModelResource):
class Meta:
model = Painter
class Painteradmin(ImportExportModelAdmin):
resources_class = PainterResource
list_display = ('last_name','first_name','date_of_birth','date_of_death','image')
fields = [('first_name','last_name'),('date_of_birth','date_of_death'),'biography','image']
inlines = (PaintingsAdminInline,)
admin.site.register(Painter,Painteradmin)
class PaintingResource(resources.ModelResource):
class Meta:
model = Painting
class PaintingAdmin(ImportExportModelAdmin):
resources_class = PaintingResource
list_display = ('id','title','painter','category','medium','display_tag','motif',)
list_filter = ('title','motif')
....
admin.site.register(Painting,PaintingAdmin)
样本数据: ID,标题,描述,主题,图像,日期,大号,高级,签名,备注,参考,category_id,location_id,medium_id,first_name,support_id,a,0 100,Tence jouors,"Tence,paysage",44.0,26.0,oui,M26,1,Tense,huile,Marius,bois,
任何输入,任何了解更多信息的机会都将受到高度赞赏。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)