Django-import-export - Экспорт отношений один ко многим с ForeignKeyWidget - возвращает пустое поле

Я пытаюсь использовать пакет dajngo-import-export для экспорта данных из двух таблиц с отношением один ко многим. У меня есть пользовательский класс ForeignKeyWidget, который переопределяет метод get_queryset.

Проблема в том, что экспорт возвращает пустое поле - никаких ошибок, просто пустое поле. Я также попробовал просто использовать ForeignKeyWidget без пользовательского класса/get_queryset - но я получаю тот же результат.

Кто-нибудь видит, что я делаю неправильно?

#admin.py

from import_export import resources
from import_export.fields import Field
from import_export.widgets import ForeignKeyWidget

class SlateDocResource(resources.ModelResource):

    actbreaks = Field(
        column_name="actbreaks",
        attribute="id",
        widget=ActBreaksForeignKeyWidget(ActTimecodes, "slatedoc_id"),
    )

class Meta:
    model = SlateDoc
    fields = [
        "actbreaks",
    ]


class ActBreaksForeignKeyWidget(ForeignKeyWidget):
    def get_queryset(self, value, row, *args, **kwargs):
        qs = ActTimecodes.objects.filter(slatedoc_id=self.pk)
        print(qs.values())
        return qs

#models.py

class SlateDoc(models.Model):

    #primary Model - fields not listed here.


class ActTimecodes(models.Model):
    #Secondary model - every slatedoc can has multiple instances of ActTimecodes

    slatedoc = models.ForeignKey(
              SlateDoc, 
              on_delete=models.CASCADE, 
             related_name="acts"
            )
    act_number = models.IntegerField(verbose_name="Act", default=1)
    tc_in = models.CharField(max_length=11, default="00:00:00:00")
    tc_out = models.CharField(max_length=11, default="00:00:00:00")
    dur = models.CharField(max_length=11, default="00:00:00:00")

    objects = ActTimecodesQuerySet.as_manager()

    class Meta:
        ordering = ["act_number", "tc_in", "tc_out"]

#version info

"python_version": { "version": ==3.10" }

"django": { "version": "==4.1.1" },

"django-import-export": { "version": "==2.8.0"},

Вот решение, которое я нашел. Ответ очень прост по сравнению с тем, что я пытался сделать - использование ForeignKey было совершенно излишним.

#admin.py 

class SlateDocResource(resources.ModelResource):

    actbreaks = Field(column_name="Act Breaks")

    def dehydrate_actbreaks(self, slatedoc):
        actbreaks = []
        count = 1
        for x in ActTimecodes.objects.filter(slatedoc_id=slatedoc.id):
            tc_in = f"{count}_in"
            tc_out = f"{count}_out"
            duration = f"{count}_dur"
            actbreak = {tc_in: x.tc_in, tc_out: x.tc_out, duration: x.dur}
            actbreaks.append(actbreak)
            count += 1
        return actbreaks

приведенный выше код возвращает каждый actbreak как dict в списке:

[{'tc_1_in': '01:00:00:00', 'tc_1_out': '01:13:34:00', 'act_1_dur': '00:13:34;00'}, {'tc_2_in': '01:13:36:00', 'tc_2_out': '01:19:03:00', 'act_2_dur': '00:05:26;28'}, {'tc_3_in': '01:19:05:00', 'tc_3_out': '01:26:13:00', 'act_3_dur': '00:07:08;02'}, {'tc_4_in': '01:26:15:00', 'tc_4_out': '01:31:16:00', 'act_4_dur': '00:05:01;02'}, {'tc_5_in': '01:31:18:00', 'tc_5_out': '01:37:39:00', 'act_5_dur': '00:06:21;00'}, {'tc_6_in': '01:37:41:00', 'tc_6_out': '01:44:10:00', 'act_6_dur': '00:06:29;00'}]
Вернуться на верх