gpt4 book ai didi

python - Django:GenericForeignKey 和 unique_together

转载 作者:太空狗 更新时间:2023-10-29 17:43:57 25 4
gpt4 key购买 nike

在我正在开发的应用程序中,我试图在公司内共享访问 token 。示例:本地办事处可以使用总部的代币在其 Facebook 页面上发布内容。

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 和其他社交媒体网站以他们自己的方式处理访问 token ,我创建了抽象类 AccessToken。每个站点都有自己的类,例如

class FacebookAccessToken(AccessToken):
# class stuff

阅读之后,我发现我必须使用 GenericForeignKey 来指向继承 AccessToken 的类。我做了以下类(class):

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'))

当我运行 django 测试服务器时,出现以下错误:

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.

我不明白为什么会出现此错误,第一次使用 GenericForeignKey。我做错了什么?

如果有更智能的方式来共享访问 token ,我很乐意听到。

最佳答案

您在这种情况下使用通用外键是正确的。

错误来自模型中的 unique_together 声明。 unique_together 只能与数据库中存在的列一起使用。由于 contentObject 不是真正的列,Django 会提示该约束。

相反,您可以执行以下操作:

unique_together = (('contentType', 'contentId', 'sharedWidth'),)

这等同于您在问题中定义的内容,因为 contentObject 实际上只是 contentTypecontentId 在幕后的组合。

关于python - Django:GenericForeignKey 和 unique_together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35228902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com