Çalıştığım uygulamada, şirket içindeki erişim belirteçlerini paylaşmaya çalışıyorum. Örnek: Bir yerel ofis, Facebook sayfasındaki bir şeyi yayınlamak için merkezin jetonlarını kullanabilir.Django: GenericForeignKey ve unique_together
class AccessToken(models.Model):
"""Abstract class for Access tokens."""
owner = models.ForeignKey('publish.Publisher')
socialMediaChannel = models.IntegerField(
choices=socialMediaChannelList, null=False, blank=False
)
lastUpdate = models.DateField(auto_now=True)
class Meta:
abstract = True
Facebook, Twitter ve diğer sosyal medya siteleri kendi yaptığım kendi yolunu ve soyut sınıfta AccessToken erişim belirteçleri ele beri. Her site kendi sınıfını ör. Ben AccessToken
miras sınıfları göstermek için bir GenericForeignKey
kullanması gerektiğini öğrendim biraz okuma yaptıktan sonra
class FacebookAccessToken(AccessToken):
# class stuff
. Ben aşağıdaki hatayı alıyorum Django sınama sunucusuna çalıştırdığınızda
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'))
: bu hatayı alıyorum neden
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.
anlamıyorum GenericForeignKey
kullanarak, ilk kez aşağıdaki sınıfını yaptı. Neyi yanlış yapıyorum?
Erişim belirteçlerini paylaşmanın daha akıllı bir yolu varsa, bunu duymayı çok isterim.
Cevabınız için teşekkür ederiz. – CyberFly
"contentId" yerine "objectId" kastettiğinizi düşünüyorum. –