我成功安装了django-import-export app,我可以从admin导入数据。假设我有一些数据库:
name | system_id id | system
a | 1 1 | system_a
b | 1 2 | system_b
所以system_id是外键 问题是我想从excel导入数据:
name | system
c | system_c
d | system_d
如何使数据相互对应。所以我可以在excel中使用系统的真实名称。
答案 0 :(得分:0)
您可以在继承“resources.ModelResource”类
的类中创建自定义方法class ApplicationResource(resources.ModelResource):
class Meta:
model = <model name>
def dehydrate_system(self, instance): #def dehydrate_<field name>(self, instanse)
return instance.system.title
答案 1 :(得分:0)
我解决了!只需使用ForeignKeyWidget:
system_name = fields.Field(column_name='system', attribute='system', widget=ForeignKeyWidget(model, 'system_name'))
答案 2 :(得分:0)
这是插入一个外键的示例。
models.py
from django.db import models
class Table1(models.Model):
system = models.CharField(max_length=383)
class Table2(models.Model):
name = models.CharField(max_length=383)
system = models.ForeignKey(Table1, blank=True, null=True, on_delete=models.CASCADE)
您需要创建一个modelResource并覆盖before_import_row以在table1中插入数据。 并将ModelResource设置为admin class。
admin.py
from .models import Table1,Table2
from import_export import resources,widgets
from import_export.fields import Field
from django.contrib import admin
class Table2Resource(resources.ModelResource):
name = Field(column_name='name',attribute='name')
system_id = Field(column_name='system', attribute='system_id', widget=widgets.ForeignKeyWidget(Table1))
class Meta:
model = Table2
skip_unchanged = True
fields = ('name','system_id')
def before_import_row(self,row, **kwargs):
value = row['system']
obj = Table1.objects.create(system = value) #create object place
row['system'] = obj.id # update value to id ob new object
@admin.register(Table2)
class Table2Admin(ImportExportModelAdmin,admin.ModelAdmin):
resource_class = Table2Resource
这就是全部。