使用django-import-export反向通过ForeignKey小部件从字段获取字段值

时间:2017-08-16 23:48:19

标签: django django-import-export

我差不多了。

型号:

class Child(models.Model):
    parent = models.ForeignKey('project.Parent')
    name = models.CharField(max_length=100)

class Parent(models.Model):
    text = models.CharField(max_length=100)

资源:

class ParentResource(resources.ModelResource):
    children = fields.Field(widget=widgets.ForeignKeyWidget(Parent))

    class Meta:
        model = Parent
        use_transactions = True
        fields = ('text', 'children__child__name')

然后视图调用资源并下载它。问题是,名称是空白的。所以,其他一切都很好,但我不能让child.name显示出来。我错过了什么?

1 个答案:

答案 0 :(得分:0)

首先, modelA 使用widgets.ForeignKeyWidget来查找相关的 modelB 的一个ForeignKey > MODELA

即。 ChildResource widgets.ForeignKeyWidget可以使用Parent查找Childs,但反之亦然。

反向执行,即循环和/或显示一组Parent(具有 ForeignKey ParentResource)的一些字段来自{{1你需要做这样的事情:

from import_export import fields, resources
from .models import Parent


class ParentResource(resources.ModelResource):

    children = fields.Field()

    class Meta:
        model = Parent
        use_transactions = True
        fields = ('text', 'children')

    def dehydrate_children(self, parent):
        children = list(parent.child_set.all())
        return ','.join([child.name for child in children])

使用dehygrate()方法。然后,当您导出ParentResource时,您将获得一个带有" children"的数据集对象。 key,其值是以逗号分隔的子项名称列表。