And*_* V. 10 django django-models
我有以下型号:
class A(models.Model):
name = models.CharField(max_length=50)
content_type = models.ForeignKey(ContentType)
Run Code Online (Sandbox Code Playgroud)
该模型应该是某些继承树中的根模型,而content_type属性是一种关于实际存储类型的提示.显然,我应该content_type在创建实例时透明地计算.我想,在__init__.但是存在一个问题 - 创建A实例有两个主要的上下文:
a = A(name='asdfdf') # here we must fill in content_typeQuerySet机械与*args元组.在这种情况下,我不应该填写content_type所以,我想写:
def __init__(self, *args, **kwargs):
super(A, self).__init__(*args, **kwargs)
if self.content_type is None: # << here is the problem
self.content_type = ContentType.objects.get_for_model(self)
Run Code Online (Sandbox Code Playgroud)
事情是self.content_type为ReverseSingleRelatedObjectDescriptor实例与__get__被覆盖的,以便它在案值抛出未设置.是的,我可以这样做:
def __init__(self, *args, **kwargs):
super(A, self).__init__(*args, **kwargs)
try:
self.content_type
except Exception, v:
self.content_type = ContentType.objects.get_for_model(self)
Run Code Online (Sandbox Code Playgroud)
但我不喜欢它.是否有更"礼貌"的方式来检查ForeignKey属性是否已设置?
| 归档时间: |
|
| 查看次数: |
8046 次 |
| 最近记录: |