使用多个外键导入 CSV

问题描述

尝试将 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 (将#修改为@)