导出和导入在 Django 中具有多对多关系的外键字段
Exporting and Importing a foreign key field that has a many-to-many relationship in 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__
方法,因为我认为它们不重要,但我在我的团队 class 中确实有定义:
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()
来获得相同的结果。
我的 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__
方法,因为我认为它们不重要,但我在我的团队 class 中确实有定义:
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()
来获得相同的结果。