Django - 根据第二个表的字段值从第一个表中获取记录



我正在开发一个Django应用程序,其中我使用PostgreSQL作为数据库。应用程序中的模型如下。

class topics(models.Model):
    topicid = models.IntegerField()
    topicname = models.CharField(max_length=512)
    topicdescription = models.CharField(max_length=512)
class Video(models.Model):
   video_file_name = models.CharField(max_length=100)
   video_url = models.CharField(max_length=100, default='default.mp4')
   video_description = models.CharField(max_length=2000, default='Video Description') 
   video_topic_id = models.IntegerField(default=1)

在这里,一个主题下将有 0 个或多个视频。

查询条件是,我想要主题列表 uniquley,这将 至少有一个视频(大于零(。意味着我必须忽略 结果中在该主题下没有任何视频的主题。

目前我使用单个获取全部函数。

all_topics = topics.objects.all((;

您应该有一个主题模型的外键,而不是该topic_id字段:

video_topic = models.ForeignKey('topics')

这将使用相同的基础video_topic_id数据库字段,因此无需更改任何数据。

现在,您可以查询没有视频的主题:

topics = topics.objects.filter(video=None)

(注意,Python 和 Django 的风格是使用首字母大写字母作为类名和单数模型名。因此,您的主题模型应称为主题。

您的查询条件是这样的,

查询条件是,我想要主题列表 uniquley,它将至少有一个视频(大于零(。意味着我必须忽略结果中在该主题下没有任何视频的主题。

如果主题表

和视频表没有任何关系,那么主题列表怎么可能有任何视频?

从"视频"表

到"主题"的"外键"表示表之间的多对一关系。一个主题实例可以有多个视频实例,但每个视频只属于一个主题。我想你需要的那种关系。

一段关系可以这样做,

class Topic(models.Model):
    topicid = models.IntegerField()
    topicname = models.CharField(max_length=512)
    topicdescription = models.CharField(max_length=512)
class Video(models.Model):
    video_file_name = models.CharField(max_length=100)
    video_url = models.CharField(max_length=100, default='default.mp4')
    video_description = models.CharField(max_length=2000, default='Video Description') 
    video_topic_id = models.ForeignKey(Topic, related_name='videos')

然后,您可以使用至少一个这样的视频过滤主题,

Topic.objects.all().exclude(videos=None)

相关内容

  • 没有找到相关文章

最新更新