0

如何auth_user_group在查询/DML 中直接指定表的 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通过要求知道组名而不是auth_user_group.id, 并导致两个查询而不是 1 来避免:

group = Groups.get(name='foo')
user.groups.remove(group)

如果你想在 Django 中直接查询一个 junction/M:N 表,通常你会创建一个“通过模型”,然后可以直接查询它。但是在这种情况下,django.contrib.auth.models 定义不使用直通模型。如果可行,我愿意创建一个自定义 AbstractUser ,其中组被定义为一个直通表。但我不确定如何指定直通表,因为auth_user_group在 django.contrib.auth.models 中没有自己的模型。

4

1 回答 1

1

由于没有显式直通模型,您可以访问隐式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

于 2022-02-10T18:50:20.237 回答