1

我几乎可以工作了。

楷模:

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 出现。我错过了什么?

4

1 回答 1

1

首先,modelAwidgets.ForeignKeyWidget使用它来查找一个相关的modelB,它modelA的 ForeignKey 。

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

反过来做,即从 a 循环和/或显示一组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()方法。然后,当您 export 时ParentResource,您将获得一个带有“children”键的数据集对象,其值是以逗号分隔的其子项名称列表。

于 2018-02-03T00:29:43.323 回答