Join 使用django orm进行连接选择
现在,给定userid=“Amy01”,我想获得“Amy01”订阅的所有主题。 使用SQL时,它是:Join 使用django orm进行连接选择,join,django-orm,Join,Django Orm,现在,给定userid=“Amy01”,我想获得“Amy01”订阅的所有主题。 使用SQL时,它是: create table topic ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(128) NOT NULL, `description` longtext NOT NULL ) create table `subscribe` ( `id` int(11) NOT NULL AUTO_INCREMENT,
create table topic (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`description` longtext NOT NULL
)
create table `subscribe` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(128) NOT NULL,
`topicid` int(11) NOT NULL,
Foreign Key (topic_id) REFERENCES topic(id)
)
如何使用django orm获得相同的select
我已经有了一个决心,但我认为这不是很好:
select t.id, t.name, t.description
from topic t join subscribe s on t.id = s.topicid
where s.userid = "Amy01"
然后,搜索Amy01订阅的所有主题
有没有更好的说法来实现这一点?我找到了一个解决方案: mytopic=topic.objects.filter(Subscribe\u set\u userid=“Amy01”).distinct() “Subscribe_set”用于“回调”订阅表 此外,在models.py中定义Subscribe实体时,如果您这样编码: topic=models.ForeignKey('topic',related_name=''u subscribe') 您还可以实现选择为: my_topic=topic.objects.filter(\u subscribe\u userid=“Amy01”).distinct() 参考:
searched_sub = FilterSubscribe.objects.filter(userid = "Amy01").select_related()
searched = []
for sub in searched_sub:
searched.append(sub.topicid)