我正在开发一个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,这将是 至少有一个视频(大于零)。意味着我必须忽略 在该主题下没有任何视频的结果主题。
目前我使用单一的get all功能。
all_topics = topics.objects.all();
答案 0 :(得分:0)
您应该拥有主题模型的ForeignKey,而不是topic_id字段:
video_topic = models.ForeignKey('topics')
这将使用相同的基础video_topic_id
数据库字段,因此不需要更改任何数据。
现在您可以查询没有视频的主题:
topics = topics.objects.filter(video=None)
(注意,Python和Django样式是为类名和单数模型名使用初始大写。所以你的主题模型应该被称为Topic。)
答案 1 :(得分:0)
您的查询条件是这个,
查询条件是,我想要主题列表 uniquley,,它将包含至少一个视频(大于零)。意味着我必须忽略结果中没有任何视频的主题。
如果主题表和视频表没有任何关系,那么主题列表怎么可以有任何视频?
从Video表到Topic的ForeignKey表示表之间的ManyToOne关系。主题实例可以有多个视频实例,但每个视频只属于一个主题。我想,你需要那种关系。
关系可以这样做,
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)