首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django过滤器排除外键

问Django过滤器排除外键
EN

Stack Overflow用户
提问于 2018-05-03 00:58:45
回答 1查看 2.4K关注 0票数 4

我正在创建一个有两个模型的新闻网站:

  1. 新闻
  2. BestNews。

BestNews有一个新闻外键。

新闻代表所有的新闻,BestNews代表推荐的新闻。

现在我已经在index.html.But中呈现了新闻列表和最佳新闻列表,这两个部分中的一些新闻是重复的。

我希望在“最佳新闻”列表中,不会出现在“新闻”列表中的新闻,一旦我从“管理中的最佳新闻”中删除了“新闻”,从“最佳新闻”中删除的新闻就会出现“新闻”列表。

这是我的新闻模式:

代码语言:javascript
复制
class News(models.Model):
    title = models.CharField(max_length=100, verbose_name='标题') 
    content = UEditorField(verbose_name="内容", width=600, height=300, imagePath="news/ueditor/", filePath="news/ueditor/", default='')

    class Meta:
        verbose_name = "新闻"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

以下是我的最佳新闻模式:

代码语言:javascript
复制
class Best(models.Model):
    select_news = models.ForeignKey(News, on_delete=models.CASCADE, related_name='select_news',verbose_name='要闻')  
    SELECT_REASON = (
        ('左一', '左一'),
        ('左二', '左二'),
    )
    select_reason = models.CharField(choices=SELECT_REASON, max_length=50, null=False)  

    class Meta:
        verbose_name = "精选"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.select_reason + '-' + self.select_news.title

这里是我的新闻列表视图:我在一个视图中获得新闻列表和最佳新闻列表。

代码语言:javascript
复制
class NewsView(View):

    def get(self, request):
        all_news = News.objects.all().order_by('-pk')
        bestnews1 = Best.objects.filter(select_reason="左一")[0].select_news
        bestnews2 = Best.objects.filter(select_reason="左二")[0].select_news
      
        return render(request, 'index.html', {
            'all_news': news,
             'bestnews1':bestnews1,
             'bestnews2':bestnews1,
        })
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-03 01:11:27

代码语言:javascript
复制
all_news = News.objects.all().order_by('-pk')

至

代码语言:javascript
复制
all_news = News.objects.filter(select_news__isnull=True).order_by('-pk')

免费建议:

变化

代码语言:javascript
复制
bestnews1 = Best.objects.filter(select_reason="左一")[0].select_news

至

代码语言:javascript
复制
bestnews1 = Best.objects.filter(select_reason="左一").first()
bestnews1_new = None if bestnew1 is None else bestnews1.select_news
return render(request, 'index.html', {
            'all_news': news,
             'bestnews1_new':bestnews1_new,
             'bestnews2_new':bestnews2_new,
        })
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50145502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档