W aplikacji, nad którą pracuję, próbuję udostępnić tokeny dostępu w firmie. Przykład: lokalne biuro może wykorzystać tokeny centrali, aby opublikować coś na swojej stronie na Facebooku.Django: GenericForeignKey i unique_together
Ponieważ Facebook, Twitter i inne serwisy społecznościowe obsługują tokeny dostępu na swój własny sposób, stworzyłem i streszczenie klasy AccessToken. Każda witryna otrzymuje własną klasę, np.
class FacebookAccessToken(AccessToken):
# class stuff
Po jakiejś lektury dowiedziałam się, że muszę użyć GenericForeignKey
pkt do klas, które dziedziczą AccessToken
. Zrobiłem następujące klasy:
class ShareAccessToken(models.Model):
"""Share access tokens with other publishers."""
sharedWith = models.ForeignKey('publish.Publisher')
sharedBy = models.ForeignKey(User)
# for foreignkey to abstract model's children
contentType = models.ForeignKey(ContentType)
objectId = models.PositiveIntegerField()
contentObject = GenericForeignKey('contentType', 'objectId')
class Meta:
unique_together = (('contentObject', 'sharedWith'))
Kiedy uruchomić serwera testowego django pojawia się następujący błąd:
core.ShareAccessToken: (models.E016) 'unique_together' refers to field 'contentObject' which is not local to model 'ShareAccessToken'. HINT: This issue may be caused by multi-table inheritance.
Nie rozumiem, dlaczego ten błąd, po raz pierwszy za pomocą GenericForeignKey
. Co ja robię źle?
Jeśli istnieje inteligentniejszy sposób udostępniania tokenów dostępu, chciałbym o tym usłyszeć.
Dziękuję za odpowiedź. – CyberFly
Myślę, że miałeś na myśli 'objectId' zamiast' contentId'. –