簡體   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