私はdjango-guardianを使用しており、外部キーに直接接続されていない3つのテーブルがあります。Guardian_groupobjectpermission テーブルは、object_pk <-> table.pk によって任意のテーブルと接続できます。Auth_persmission には codename フィールドがあります。テーブルスキームの画像を見てください:
codename = 'can_view' を持つ pybb_forum テーブルからデータを取得する必要があります。
SQL では、このクエリは次のようになります。
mysql> select * from pybb_forum as ff join guardian_groupobjectpermission as gg on ff.id = gg.object_pk join auth_permission as pp on gg.permission_id = pp.id where codename = 'view_forum';
しかし、django ORMを使用してこのクエリを作成する必要があるかどうかはわかりません。出来ますか ?
何かのようなもの
Forum.objects.filter(groupobjectpermission__permission__codename='view_forum')
?
モデルコードは次のとおりです。
# django auth permission model:
class Permission(models.Model):
name = models.CharField(_('name'), max_length=50)
content_type = models.ForeignKey(ContentType)
codename = models.CharField(_('codename'), max_length=100)
# guardian group permission model
class GroupObjectPermissionBase(BaseObjectPermission):
permission = models.ForeignKey(Permission)
content_type = models.ForeignKey(ContentType)
object_pk = models.CharField(_('object ID'), max_length=255)
content_object = GenericForeignKey(fk_field='object_pk')
group = models.ForeignKey(Group) # reference to django group
class Forum(models.Model):
name = models.CharField(_('Name'), max_length=80, default='')
slug = models.SlugField(default='', unique=True)
hidden = models.BooleanField(_('Hidden'), blank=False, null=False, default=False)
headline = models.TextField(_('Headline'), blank=True, null=True)
class Meta(object):
permissions = (
('view_forum', 'Only view forum'),
)