django-admin - 使用 django-import-export 导入后如何获取导入对象的实例?
问题描述
在使用django-import-export 导入后,我正在尝试将对象添加到相关模型中。
我的模特
class Event(models.Model):
title = models.CharField(max_length=150)
class EventSession(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name="sessions")
start_date = models.DateTimeField()
end_date = models.DateTimeField()
我的导入数据
ID | 开始日期 | 开始时间 | 分钟 | 会话 |
---|---|---|---|---|
21 年 9 月 1 日 | 10:00 | 60 | 2 | |
21 年 9 月 8 日 | 10:00 | 60 | 3 |
我的模型资源类
我试图覆盖after_import_row
以获取导入的事件,然后创建事件会话,但我不知道如何获取导入的事件。
class EventResource(resources.ModelResource):
start_date = fields.Field()
start_time = fields.Field()
def after_import_row(self, row, row_result, row_number=None, **kwargs):
""" After importing the row, get the saved event and save the event sessions."""
event = get_instance() # HOW TO GET THE INSTANCE????
start_datetime = timezone.make_aware(
datetime.combine(row["start_date"], row["start_time"])
)
end_datetime = start_datetime + timedelta(minutes=row["minutes"])
first_session = EventSession(
event=event,
start_date=start_datetime,
end_date=end_datetime,
)
first_session.save()
for _ in range(1, row["sessions"]):
# Sessions are always consecutive days
start_datetime = start_datetime + timedelta(days=1)
end_datetime = end_datetime + timedelta(days=1)
event_session = EventSession(
event=event,
start_date=start_datetime,
end_date=end_datetime,
)
event_session.save()
return super().after_import_row(
row, row_result, row_number=row_number, **kwargs
)
class Meta:
model = Event
fields = (
"id",
"title",
"start_date",
"start_time",
"sessions",
)
skip_unchanged = True
report_skipped = True
解决方案
您还可以按如下方式获取实例 ID:
def after_import_row(self, row, row_result, row_number=None, **kwargs):
print(row_result.object_id)
显然,如果需要,您可以加载该对象。
另一种方法是覆盖after_import()
. 在这种情况下,result
传递给方法的对象 contains rows
,它是所有导入行的列表。
def after_import(self, dataset, result, using_transactions, dry_run, **kwargs):
for row_result in result:
print(row_result.object_id)
推荐阅读
- node.js - mongo db data not returned in resolver function for graphql but working in routes of my nodejs server
- corda - 是否有远程停止或重新启动 Corda 节点的 RPC 操作?
- bokeh - Python Bokeh - 服务时是否可以限制 RAM 使用?
- c# - HttpClient.GetAsync 挂起,然后互联网在其执行过程中消失
- javascript - 如何处理 Chrome 网络错误?[net::ERR_CONNECTION_RESET,net::ERR_CONNECTION_REFUSED]
- sum - 将 SELECT SUM 放入 IF 语句时出错
- java - 如何在 Java、Hibernate 中修复“无法找到具有逻辑名称的列”
- ios - 检测代码是否在 Framework vs. App vs. Bundle
- angular - 无法弄清楚它告诉我“模块‘AppModule’声明的意外值‘未定义’”
- javascript - 卡在 javascript node express 中的过滤