我有一个具有独特通用外键关系的模型:
class Contact(models.Model):
...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
class Meta:
unique_together = ('content_type', 'object_id',)
意思是一个Contact
只能属于一个对象。通常,当我想扭转关系时我可以这样做
class Person(models.Model):
...
contacts = generic.GenericRelation(Contact)
并打电话person.contacts.all()
会给我所有的对象。因为只有一个Contact
在我的情况下将永远被返回,是否有更好的方法来反向访问该对象?
附注我可以写person.contact.all()[0]
但必须有一个更清洁的方法
好吧,查看 Chris 评论中的问题很有帮助,我编写了一个 mixin 来使用快速查找返回对象(应该缓存):
class ContactMixin(object):
@property
def contactcard(self):
ctype = ContentType.objects.get_for_model(self.__class__)
try:
contact = Contact.objects.get(content_type__pk = ctype.id, object_id=self.id)
except Contact.DoesNotExist:
return None
return contact
以及此人:
class Person(ContactMixin, models.Model):
...
现在我可以打电话
myperson.contactcard.phone_number
我暂时不会接受,因为可能还有其他建议
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)