Python获取GenericRelation对象

时间:2014-09-20 14:53:26

标签: python django object generic-relations

我有以下代码:

数据/ telephone.py

class TelephoneNumber(models.Model):

    MOBILE = 0
    HOME = 1
    TELEFON_CHOICES = (
        (MOBILE, _("Mobile")),
        (HOME, _("Landline")),
    )

    object_id    = models.PositiveIntegerField()
    content_type = models.ForeignKey(ContentType)
    of           = generic.GenericForeignKey('content_type', 'object_id' )

    label = models.SmallIntegerField(choices=TELEFON_CHOICES) 
    number = models.CharField(max_length=20, blank=True)

model.py

class Staff(models.Model):

    user = models.OneToOneField(User)
    telephonenumbers = GenericRelation(TelephoneNumber, related_query_name='telnumber')

不,我想提供一个功能来检索用户的每个电话号码:

def get_telnumbers(self):
    tellist = []
    #print(self.telephonenumbers.all())
    for tel in self.telephonenumbers.all():
        tellist.append(tel)
    return tellist

问题是,即使提供了很多电话号码,print(self.telephonenumbers.all())行也不会打印任何电话号码。 返回的词典也是空的。

如何访问Staff上下文中保存的GenericRelation对象?

修改

以下代码:

for tel in TelephoneNumber.objects.all():
        print(tel)
        print(tel.of)

给我保存的每个电话号码,并通过tel.of电话号码所属的合适的员工用户。

那么为什么self.telephonenumbers.all()没有工作(self.user也会返回应该保存电话号码的正确用户)?

2 个答案:

答案 0 :(得分:0)

确保在创建新的TelephoneNumber对象时,您提供content_object属性作为相应的Staff对象

答案 1 :(得分:0)

我仍然不确定为什么self.telephonenumbers.all()无效。

但我现在正在使用这种(有点丑陋)的解决方法:

def get_telnumbers(self):
    for tel in TelephoneNumber.objects.all():
        if tel.of.id == self.id:
            ...

如果有人仍有更​​好的想法,我对此持开放态度!