Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用django import-export在admin中对导入字段进行排序?_Python_Django_Django Import Export - Fatal编程技术网

Python 如何使用django import-export在admin中对导入字段进行排序?

Python 如何使用django import-export在admin中对导入字段进行排序?,python,django,django-import-export,Python,Django,Django Import Export,我正在使用django import-export和ImportExportModelAdmin从管理界面将数据从文件导入数据库 下面是我使用的模型资源: class ImportedBetResource(resources.ModelResource): date = fields.Field(column_name='Date', attribute='date', widget=D

我正在使用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
这是来自以下站点的导入视图的屏幕截图:

您可以看到文本“此导入程序将导入以下字段”,后跟字段名称

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

country = fields.Field(column_name='Country',
                       attribute='country',
                       widget=ForeignKeyWidget(Country, 'name'))
然后是
类元字段中定义的剩余字段

 This importer will import the following fields: Date, Time, Sport, Country, Bookie, Currency, Odds, Status, Id, Competition, Home, Visitor, Bet, Stake
问题是字段的顺序与我的文件中字段的顺序不一致,数据被打乱了

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

导出顺序就是答案! 将export_order选项添加到资源的元字段,如下所示:

或您希望的任何首选顺序)和django import export将相应地导入您指定的字段!之所以这样做,是因为导出顺序由get_fields()调用,而get_import_fields()和get_export_fields()又分别调用,从而影响两个进程的整个工作流

def导出顺序=无
def get_字段(自身,**kwargs):
"""
返回按顺序排序的字段
:attr:`~import\u export.resources.ResourceOptions.export\u order`。
"""
在self.get\u export\u order()中为f返回[self.fields[f]
def get_导入_字段(自身):
返回self.get_字段()
def get_导出_字段(自身):
返回self.get_字段()
def导入对象(自身、对象、数据、干运行):
"""
遍历此资源中的每个字段并调用
:meth:`~import\u export.resources.Resource.import\u字段`。如果
``import_field()``导致为引发``ValueError``错误
在多个字段中的一个字段中,这些错误被捕获并作为单个,
多字段验证错误。”“”
错误={}
对于self.get_import_fields()中的字段:
如果isinstance(field.widget、widgets.ManyToManyWidget):
持续
尝试:
self.import_字段(字段、对象、数据)
除ValueError为e外:
错误[field.attribute]=验证错误(
强制文本(e),代码=“无效”)
如果出现错误:
引发验证错误(错误)
以上是本书的摘录。为了进一步澄清,我还建议导入数据工作流和导入导出的方法

我希望这能有所帮助

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"]