【发布时间】:2019-04-27 02:11:59
【问题描述】:
从另一个安装的应用程序,我有这样的模型
class Organization(model.Model):
name = models.CharField(max_length=255, blank=True)
class Person(model.Model):
name = models.CharField(max_length=255, blank=True)
class Membership(model.Model):
organization = models.ForeignKey(
Organization,
related_name='memberships',
# memberships will go away if the org does
on_delete=models.CASCADE,
help_text="A link to the Organization in which the Person is a member.")
person = models.ForeignKey(
Person,
related_name='memberships',
null=True,
# Membership will just unlink if the person goes away
on_delete=models.SET_NULL,
help_text="A link to the Person that is a member of the Organization.")
在我的应用程序中,我需要为某些模型添加一些方法。所以我有一个像
class ProxiedOrganization(other_app.models.Organization):
class Meta:
proxy = True
special_attribute = 'foo'
class ProxiedPerson(other_app.models.Person):
class Meta:
proxy = True
def special_method(self):
print('I do something special')
当我从某个组织获得成员资格时,它们的类型是 other_app.models.Person。
> type(proxied_org_instance.memberships[0].person)
<class 'other_app.models.Person'>
但是,我希望它们成为我的代理类的实例
> type(proxied_org_instance.memberships[0].person)
<class 'my_app.models.ProxiedPerson'>
有什么好的方法吗?这是我可以用查询管理器做的事情吗?该解决方案必须适用于 Django 2.0。
【问题讨论】:
-
这类似于stackoverflow.com/questions/3891880/…,但没有一个建议的解决方案适用于 Django 2.0
标签: django django-models django-2.0