• Django-Import-Export插件关于外键的处理


    前言

    Django-Import-Export是一款很好用很方便的Django数据导出导入插件,可以和DjangoAdmin管理后台完美集成,只需要少量的代码配置即可方便实现你要的多种格式导出导入,关于这个插件的使用更多可以看我之前的文章:Django数据导入导出神器django-import-export使用

    之前我在使用中都是专门做了一个原始数据的表来存导入的数据,然后再对原始数据表做一些数据处理,把数据存到其他表才能真正使用这些数据。(不是很好的做法好像)

    然后现在需要的是在已有表结构的基础上,导入数据,而且我需要导入数据的这个表,里面还有几个外键,这就涉及到对于外键的处理了。

    于是在网上查了很久(面向Google编程),国内的资料以参考资料的两个文章为主,看了下类似奇技淫巧的hack方式解决的,感觉一般般,这样hack方式不能让我满意,于是放弃Google,直接啃官方文档(我好后悔为啥不一开始就啃官方文档……)

    解决方案

    真正的解决方案,还得看官方文档。

    模型配置

    先看看模型是怎么定义的,这里我把官方的examples放出来,我自己项目的模型字段太多了,还是看官方的比较清楚。

    class Author(models.Model):
        name = models.CharField(max_length=100)
    
        def __str__(self):
            return self.name
    
    
    class Category(models.Model):
        name = models.CharField(max_length=100)
    
        def __str__(self):
            return self.name
    
    
    class Book(models.Model):
        name = models.CharField('Book name', max_length=100)
        author = models.ForeignKey(Author, blank=True, null=True)
        author_email = models.EmailField('Author email', max_length=75, blank=True)
        imported = models.BooleanField(default=False)
        published = models.DateField('Published', blank=True, null=True)
        price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
        categories = models.ManyToManyField(Category, blank=True)
    
        def __str__(self):
            return self.name
    

    Resource配置

    关于Resource配置的更多可以参考官方文档,不想啃文档可以看我上一篇文章:文章链接

    from import_export import fields, resources
    from import_export.widgets import ForeignKeyWidget
    
    class BookResource(resources.ModelResource):
        author = fields.Field(
            column_name='author',
            attribute='author',
            widget=ForeignKeyWidget(Author, 'name'))
    
        class Meta:
            fields = ('author',)
    

    搞定,这样在导入的时候会自动关联外键author。

    参考资料

    欢迎交流

    程序设计实验室专注于互联网热门新技术探索与团队敏捷开发实践,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~

    It never rains but it pours. 欢迎关注我的公众号:DealiAxy 提供更多技术文章
  • 相关阅读:
    CentOS安装sctp协议
    视频编码未来简史
    Linux内核:分析coredump文件
    skb的两个函数pskb_copy和skb_copy
    《Linux内核设计与实现》读书笔记(十二)- 内存管理
    Linux内核学习笔记之seq_file接口创建可读写proc文件
    内核如何签名
    《女士品茶》与统计检验
    K近邻算法
    PCA原理分析
  • 原文地址:https://www.cnblogs.com/deali/p/14886999.html
Copyright © 2020-2023  润新知