Python 如何使用django import-export在admin中对导入字段进行排序?
我正在使用django import-export和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
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"]