Join 使用django orm进行连接选择

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,

现在,给定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,
  `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)