如何使用Django importexport在admin中对导入字段进行排序?

2024-06-01 00:39:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用django import-export和ImportExportModelAdmin从管理界面将数据从文件导入数据库。在

下面是我使用的模型资源:

class ImportedBetResource(resources.ModelResource):
    date = fields.Field(column_name='Date',
                         attribute='date',
                         widget=DateWidget(format="%d/%m/%Y"))
    time = fields.Field(column_name='Time',
                         attribute='time',
                         widget=TimeWidget(format="%H:%M"))
    sport = fields.Field(column_name='Sport',
                         attribute='sport',
                         widget=ForeignKeyWidget(Sport, 'name'))
    country = fields.Field(column_name='Country',
                           attribute='country',
                           widget=ForeignKeyWidget(Country, 'name'))
    bookie = fields.Field(column_name='Bookie',
                          attribute='bookie',
                          widget=ForeignKeyWidget(Bookie, 'name'))
    currency = fields.Field(column_name='Currency',
                            attribute='stake_currency',
                            widget=ForeignKeyWidget(Currency, 'name'))
    odds = fields.Field(column_name="Odds",
                        attribute="odds",
                        widget=DecimalWidget())
    status = fields.Field(column_name='Status',
                          attribute='status',
                          widget=ForeignKeyWidget(Status, 'name'))

    class Meta:
        model = Bet
        fields = ("id", "date", "time", "sport",
                  "country",
                  "competition", "home",
                  "visitor",
                  "bookie", "bet", "stake",
                  "currency",
                  "odds", "status")
        clean_model_instances = True


    @classmethod
    def field_from_django_field(self, field_name, django_field, readonly):
        """
        Returns a Resource Field instance for the given Django model field.
        """
        FieldWidget = self.widget_from_django_field(django_field)
        widget_kwargs = self.widget_kwargs_for_field(field_name)
        field = fields.Field(attribute=field_name, column_name=field_name.replace("__name", "").title(),
                             widget=FieldWidget(**widget_kwargs), readonly=readonly)
        return field

这是来自documentation的导入视图的屏幕截图:

enter image description here

您可以看到文本“This importer will import the following fields”后跟字段名。在

在我的例子中,显式定义的字段首先出现,例如:

^{pr2}$

以及class Meta fields中定义的其余字段:

 This importer will import the following fields: Date, Time, Sport, Country, Bookie, Currency, Odds, Status, Id, Competition, Home, Visitor, Bet, Stake

问题是字段的顺序与我文件中字段的顺序不符,并且数据被置乱。在

只有在文件中有错误时才会发生这种情况。在


Tags: djangonameimportfieldfieldsdatetimeattribute
1条回答
网友
1楼 · 发布于 2024-06-01 00:39:03

出口订单就是答案!在

将export_order选项添加到资源的Meta字段中,如下所示: 在

class Meta:
        model = Bet
        fields = ("id", "date", "time", "sport",
                  "country",
                  "competition", "home",
                  "visitor",
                  "bookie", "bet", "stake",
                  "currency",
                  "odds", "status")
        clean_model_instances = True
        export_order = ["Date", "Time", "Sport", "Country", 
                       "Bookie", "Currency", "Odds", "Status", 
                       "Id", "Competition", "Home", "Visitor", 
                       "Bet", "Stake"]

或以您希望的任何首选顺序)和django import export将相应地导入您声明的字段!这样做的原因是,export_order是由get_fields()调用的,而get_import_fields()又被get_export_fields()调用,影响两个进程的整个工作流。在

^{pr2}$

以上是import_export.resources.py的节选。为了进一步澄清,我还推荐import数据工作流documentation和import{a3}的方法。在

我希望这能有所帮助!在

相关问题 更多 >