微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用多个外键导入 CSV

如何解决使用多个外键导入 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 举报,一经查实,本站将立刻删除。