微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Django 中导出和导入具有多对多关系的外键字段

如何解决在 Django 中导出和导入具有多对多关系的外键字段

我的 Django 模型之间有一个复杂的关系,我正试图让 django-import-export 正常运行。

class Person(models.Model):
    name = models.CharField(max_length=64)

class Team(models.Model):
    rep = models.ManyToManyField(Person,related_name="rep")
    
    def get_reps(self):
        return "/".join(sorted([p.name for p in self.reps.all()]))

class Account(models.Model):
   tid = models.IntegerField("Territory ID",primary_key=True)
   name = models.CharField("Territory Name",max_length=64)
   sales_team = models.ForeignKey(Team,related_name="sales_team")

我正在尝试使用 get_reps 方法呈现的代表名称导出(并希望稍后导入)区域。

class TerritoryResource(resources.ModelResource):
    tid = fields.Field(attribute='tid',column_name="Territory ID")
    name = fields.Field(attribute='name',column_name="Territory Name")
    sales_team = fields.Field(
        column_name="Sales Team",widget=widgets.ForeignKeyWidget(Team,"get_reps")
    )

导出给我一个空白字段。如果我不使用小部件,我会得到预期的团队 ID。

是否可以在导出中获取我的自定义名称

解决方法

我没有在示例代码中包含标准的 __str__ 方法,因为我认为它们并不重要,但我在我的 Team 类定义中确实有:

def __str__(self):
    return self.get_reps()

这意味着,如果我以更多的创造力阅读documentation,我会想出如何做到这一点。看似简单:

class TerritoryResource(resources.ModelResource):
    ...

    def dehydrate_sales_team(self,territory):
        return str(territory.sales_team)

我也可以使用 return territory.sales_team.get_reps() 来获得相同的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。