通过与 django-import-export 相反的 ForeignKey 小部件从字段中获取字段值

Getting a field value from a field via a ForeignKey widget in reverse with 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 出现。我错过了什么?

首先,widgets.ForeignKeyWidgetmodelA用来查找相关的modelB modelA.

的外键

即a ChildResource 可以用 widgets.ForeignKeyWidget 来查找 a Parent,反之则不行。

反向执行,即向上循环 and/or 显示一组 Childs 的一些字段(谁有 ForeignKey Parent) 来自 ParentResource,你需要做这样的事情:

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])

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