如何通过ID访问auth_user_group table
How to access auth_user_group table by ID
如何在queries/DML中直接指定auth_user_group
table的ID列?
我指的是 auth_user_group.id
,不是 auth_group.id
也不是 auth_user_group.group_id
。
比如我想直接发出DML像:
delete from auth_user_group where auth_user_group.id = 1
select id, user_id, group_id from auth_user_group where auth_user_group.id = 1;
我不对以下变通方法感兴趣,它通过要求知道组名而不是auth_user_group.id
来避免auth_user_group
,并导致两个查询而不是 1:
group = Groups.get(name='foo')
user.groups.remove(group)
如果你想在Django中直接查询一个junction/M:N table,通常你会创建一个“通过模型”然后直接查询它。但是在这种情况下,django.contrib.auth.models 定义不使用直通模型。如果可行,我愿意创建一个自定义 AbstractUser,其中组被定义为通过 table。但我不确定如何通过 table 指定,因为 auth_user_group
在 django.contrib.auth.models 中没有自己的模型。
由于没有显式直通模型,您可以访问隐式 through
模型
Group.user_set.through.objects.get(id=1)
或
User.groups.through.objects.get(id=1)
https://docs.djangoproject.com/en/4.0/ref/models/fields/#django.db.models.ManyToManyField.through
如何在queries/DML中直接指定auth_user_group
table的ID列?
我指的是 auth_user_group.id
,不是 auth_group.id
也不是 auth_user_group.group_id
。
比如我想直接发出DML像:
delete from auth_user_group where auth_user_group.id = 1
select id, user_id, group_id from auth_user_group where auth_user_group.id = 1;
我不对以下变通方法感兴趣,它通过要求知道组名而不是auth_user_group.id
来避免auth_user_group
,并导致两个查询而不是 1:
group = Groups.get(name='foo')
user.groups.remove(group)
如果你想在Django中直接查询一个junction/M:N table,通常你会创建一个“通过模型”然后直接查询它。但是在这种情况下,django.contrib.auth.models 定义不使用直通模型。如果可行,我愿意创建一个自定义 AbstractUser,其中组被定义为通过 table。但我不确定如何通过 table 指定,因为 auth_user_group
在 django.contrib.auth.models 中没有自己的模型。
由于没有显式直通模型,您可以访问隐式 through
模型
Group.user_set.through.objects.get(id=1)
或
User.groups.through.objects.get(id=1)
https://docs.djangoproject.com/en/4.0/ref/models/fields/#django.db.models.ManyToManyField.through