我有两个模型,它们通过ManyToManyField
连接。我没有手动指定through
表,所以Django隐式地创建了一个。
我现在可以以某种方式自定义through
表,特别是更改其___str___
函数吗?
基本上,我试图覆盖TabularInline
管理类使用的"行标题",比如在以下问题中:
- 在admin中删除或编辑对象名称。表格联机
- 如何在渲染StackedOnline字段时覆盖str方法
- https://groups.google.com/d/topic/django-users/d0QPIAklSug
但我希望避免自定义模板或显式创建"关系表",因为现在它由Django管理。
您可以对__str__
进行猴子补丁。例如,如果您的模型看起来像:
class ModelA(models.Model):
pass
class ModelB(models.Model):
modela_set = models.ManyToManyField(ModelA)
然后你可以猴子补丁:
class ModelA(models.Model):
pass
class ModelB(models.Model):
modela_set = models.ManyToManyField(ModelA)
defmystr(self):
return 'str-of-through-model'
ModelB.modela_set.through.__str__ = mystr
但这不是很好的做法。理想情况下,您可以创建一个直通模型,并将方法添加到该模型中。