我有以下代码:
数据/ 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
也会返回应该保存电话号码的正确用户)?
答案 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:
...
如果有人仍有更好的想法,我对此持开放态度!