1

次のコードがあります。

data/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())多数の電話番号が提供されているにもかかわらず、回線が電話番号を出力しないことです。返された辞書も空です。

コンテキスト内に保存された GenericRelation オブジェクトにアクセスするにはどうすればよいStaffですか?

編集:

次のコード:

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

保存されているすべての電話番号を教えてくれ、tel.ofその電話番号が属する適切なスタッフ ユーザーを通じて提供されます。

では、なぜ機能しないのでしょうかself.telephonenumbers.all()(self.user電話番号が保存されているはずの適切なユーザーも返されます)。

4

2 に答える 2

0

なぜ機能しないのかself.telephonenumbers.all()はまだわかりません。

しかし、私は現在、この(ちょっと醜い)回避策を使用しています:

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

誰かがまだより良いアイデアを持っているなら、私はそれを受け入れます!

于 2014-09-24T09:26:31.350 に答える
0

新しいTelephoneNumberオブジェクトを作成するときは、content_object属性を対応するStaffオブジェクトに指定してください

于 2014-09-20T15:05:56.170 に答える