Dar*_*ech 2 python django django-models
我有一个Django项目,它使用通过安装的第三方软件包pip.我想从该包中扩展一个模型,并想知道在这种情况下最佳实践是什么.我可以通过猴子修补获得我想要的功能,但我知道这不一定是好习惯.我只是添加一个方法,所以没有任何影响数据库.
这是我目前的解决方案.
models.py:
from allauth.socialaccount.models import SocialAccount
def get_foo(self):
...
return foo
SocialAccount.get_foo = get_foo
Run Code Online (Sandbox Code Playgroud)
views.py
social_acc = SocialAccount.objects.get(
...
)
foo = social_acc.get_foo()
Run Code Online (Sandbox Code Playgroud)
我觉得我应该继承和继承,但当然我松散地引用了包含我需要的所有基本数据的原始模型.
任何帮助非常感谢.
你绝对应该使用子类.如果"但当然我松散地引用了包含我需要的所有基本数据的原始模型",你的意思是将为你的新子类创建一个新的数据库表,有一个非常简单的解决方案.使用代理继承:
from allauth.socialaccount.models import SocialAccount
class YourSocialAuth(SocialAccount):
def get_foo(self):
...
return foo
class Meta:
proxy = True
Run Code Online (Sandbox Code Playgroud)
YourSocialAuth使用相同的数据库表(包括它包含的数据)作为SocialAccount,因此通过SocialAccount可访问的每个对象也可通过YourSocialAuth获得,但是当您使用前者时,您可以使用自定义方法:
social_acc = YourSocialAccount.objects.get(
...
)
foo = social_acc.get_foo()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |