繁体   English   中英

如何从 Import-Export(管理员集成)Django 中选择导入?

[英]How to Import from Import-Export(Admin integration) Django with choices?

我有一个 model:

class Student(models.Model):
TITLE = (
    ('Title_Mr', ('Mr')),
    ('Title_Ms', ('Ms')),
)
Name = models.CharField(max_length = 25, default = '')
Title = models.CharField(max_length = 32, choices = TITLE, blank=True, null = True)
...

通过选择和导入导出功能,我想导入具有“先生”或“女士”作为标题值的学生。

我尝试的是从这个答案Django 导入导出选择字段

但显然这是为了出口? 如果我想导入它怎么办。 这是我的资源.py

from import_export import resources, fields

从 main.models 导入 Schulungsteilnehmer

class StudentsResource(resources.ModelResource):
    Title = fields.Field(attribute='get_Title_display', column_name=('Title'))
    class Meta:
        model = Student
        exclude=('id',)
        import_id_fields = ('StudentID',)

我可以毫无问题地导入,但选择字段为空,例如,当我在管理面板中单击学生进行编辑时。 如何将值保存为选择选择值?

查看文档以获取选择

每个元组中的第一个元素是要在 model 上设置的实际值,第二个元素是人类可读的名称。

因此,在您的情况下,“Title_Mr”或“Title_Ms”将是存储在数据库中的值。

这意味着如果您在Resource中定义Title字段,您将能够成功导入,如下所示:

title = fields.Field(attribute='title', column_name='Title')

(我根据样式指南将字段名称设为小写)

  1. attribute是将要设置的 Model class 上的属性。

  2. column_name是导入文件中 header 的名称。

  3. 这仅在导入文件中的数据与choices声明匹配时才有效(例如“Title_Mr”)

但是,您说源数据是“先生”或“女士”。 要解决这个问题,最简单的方法是让“先生”和“女士”成为choices声明的值:

TITLE = (
    ('Mr', ('Mr')),
    ('Ms', ('Ms')),
)

但如果这是不可能的,那么您将不得不创建一个自定义小部件,它可以解析源数据(例如'Mr')并将其转换为正确的值(例如'Title_Mr')。

有关创建自定义小部件的帮助, 源代码中有示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM