[英]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')
(我根据样式指南将字段名称设为小写)
attribute
是将要设置的 Model class 上的属性。
column_name
是导入文件中 header 的名称。
这仅在导入文件中的数据与choices
声明匹配时才有效(例如“Title_Mr”)
但是,您说源数据是“先生”或“女士”。 要解决这个问题,最简单的方法是让“先生”和“女士”成为choices
声明的值:
TITLE = (
('Mr', ('Mr')),
('Ms', ('Ms')),
)
但如果这是不可能的,那么您将不得不创建一个自定义小部件,它可以解析源数据(例如'Mr')并将其转换为正确的值(例如'Title_Mr')。
有关创建自定义小部件的帮助, 源代码中有示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.