【发布时间】:2021-10-26 21:36:23
【问题描述】:
我正在尝试在使用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 | start_date | start_time | minutes | sessions |
|---|---|---|---|---|
| 9/1/21 | 10:00 | 60 | 2 | |
| 9/8/21 | 10:00 | 60 | 3 |
我的 ModelResource 类
我正在尝试覆盖 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
【问题讨论】:
标签: django-admin django-import-export