我目前正在尝试优化以下在我当前项目中经常调用的代码
Hit(link = self.link,
ip = self.request.META['REMOTE_ADDR'],
referrer = self.request.META['HTTP_REFERER'],
country = Country.objects.filter(shorthand=country_code).get()
).save()
它生成以下 SQL 查询(SQLite 后端,用于测试目的):
SELECT * FROM "ucp_country" WHERE "ucp_country"."shorthand" = 'DE';
INSERT INTO "ucp_hit" ("link_id", "ip", "referrer", "country_id")
VALUES (1, '127.0.0.1', 'http://127.0.0.1:8000/ucp/manage_links', 83);
SELECT 查询返回DE
的国家代码及其ID在哪里。83
有没有办法告诉 Django 将查询合并为一个?我知道传递未知国家/地区代码时发生的异常,发布的代码仅用于解释问题。我在想类似的东西:
INSERT INTO "ucp_hit" ("link_id", "ip", "referrer", "country_id")
VALUES (1, '127.0.0.1', 'http://127.0.0.1:8000/ucp/manage_links',
(SELECT "id" FROM "ucp_country" WHERE "ucp_country"."shorthand" = 'DE'));
如果找不到请求的国家/地区,则应该插入查询NULL
。是否可以告诉 Django 以某种方式生成这样的查询?