【问题标题】:How to Import from Import-Export(Admin integration) Django with choices?如何从 Import-Export(Admin 集成)Django 中选择导入?
【发布时间】:2020-11-18 19:04:01
【问题描述】:

我有一个模型:

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 import-export choices field

但显然这是为了出口? 如果我想导入它怎么办。这是我的资源.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',)

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

【问题讨论】:

    标签: django django-models django-forms django-admin django-import-export


    【解决方案1】:

    看着documentation for choices

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

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

    这意味着如果您在Resource 中定义了Title 字段,则可以成功导入,如下所示:

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

    (根据style guidelines,我将字段名称设为小写)

    1. attribute 是要设置的 Model 类的属性。

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

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

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

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

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

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

    【讨论】:

    • 这个答案解决了我的问题。使用 TITLE=(('Mr',('Mr'),('Ms',('Ms')) 效果很好。显示导入的数据和标题。非常感谢,我真的很感激!将答案标记为“解决了我的问题”。再次感谢您的快速帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2021-08-11
    • 2015-12-05
    • 2015-05-08
    相关资源
    最近更新 更多