我正在开发一个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)