【问题标题】:How to access auth_user_group table by ID如何通过 ID 访问 auth_user_group 表
【发布时间】:2022-02-11 02:57:15
【问题描述】:

如何在query/DML中直接指定auth_user_group表的ID列?

我指的是auth_user_group.id不是auth_group.id也不是auth_user_group.group_id

比如我想直接发出DML like:

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 表,通常你会创建一个“through Model”然后直接查询它。但是在这种情况下,django.contrib.auth.models 定义不使用直通模型。如果可行,我愿意创建一个自定义 AbstractUser ,其中组被定义为一个直通表。但我不确定如何指定直通表,因为auth_user_group 在 django.contrib.auth.models 中没有自己的模型。

【问题讨论】:

    标签: django django-rest-framework django-3 django-4.0


    【解决方案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

    【讨论】:

    • 谢谢吉米。你从哪里学来的?只是浏览文档?
    • 阅读文档,深入研究源代码,已经使用 Django 多年...
    猜你喜欢
    • 1970-01-01
    • 2012-12-24
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2014-01-24
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多