gpt4 book ai didi

django - 在不执行 select 的情况下插入 django 多对多表

转载 作者:行者123 更新时间:2023-12-01 22:23:51 25 4
gpt4 key购买 nike

我想对 Django 多对多表执行简单的插入操作,例如:

INSERT INTO "chat_room_users" ("room_id", "user_id") values (35, 6)

这是我的 models.py:

class User(AbstractBaseUser):
...

class Room(models.Model):
users = models.ManyToManyField(User, related_name='rooms')
...

code.py:

print('start')
room = Room.objects.get(id=35)
user = User.objects.get(id=6)
room.users.add(user)
print('finish')

在这种情况下,Django 执行 3 次数据库查询,这是日志:

start
SELECT "chat_room"."id", "chat_room"."name", "chat_room"."disabled" FROM "chat_room" WHERE "chat_room"."id" = 35; args=(35,)
SELECT "chat_user"."id", "chat_user"."password", "chat_user"."last_login", "chat_user"."username", "chat_user"."sex" FROM "chat_user" WHERE "chat_user"."id" = 6; args=(6,)
BEGIN; args=None
SELECT "chat_room_users"."user_id" FROM "chat_room_users" WHERE ("chat_room_users"."room_id" = 35 AND "chat_room_users"."user_id" IN (6)); args=(35, 6)
INSERT INTO "chat_room_users" ("room_id", "user_id") SELECT 35, 6; args=(35, 6)
finish

我希望 Django 只执行 1 个插入查询,而不是那些无用的选择。如何使用 Django QuerySet 实现此目的?

  1. 我不想使用 native 查询
  2. 我不想创建中间件表,因为一些 Django 功能不适用于它。

提前感谢您的帮助!

最好的问候,

最佳答案

您可以通过 Room.users.through 访问自动创建的直通模型。所以:

Room.users.through.objects.create(room_id=35, user_id=6)

关于django - 在不执行 select 的情况下插入 django 多对多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098534/

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