2017-10-20 94 views
0

假设我有一个架构如下图所示:过滤数据集不具有值

Book | Author 
------------- 
B1 | A1 
B1 | A3 
B1 | A2 

B2 | A5 
B2 | A4 
B2 | A3 

B3 | A5 
B3 | A6 
B3 | A1 

B4 | A1 
B4 | A5 
B4 | A6 

与以下型号:

class Books(models.Model): 
    author = models.CharField(
     max_length=100, 
     blank=False, 
     null=False, 
     db_index=True, 
     verbose_name=_('authors'), 
    ) 
    book = models.CharField(
     max_length=50, 
     blank=False, 
     null=False, 
     db_index=True, 
     verbose_name=_('book'), 
    ) 

    book_type = models.CharField(
     max_length=50, 
     blank=False, 
     null=False, 
     default="regular" 
    ) 

    flavour = models.CharField(
     max_length=10, 
     blank=False, 
     null=False, 
     verbose_name=_('flavour'), 
    ) 
    cost = models.IntegerField() 
    status = models.CharField(
     max_length=100, 
     null=True, 
     blank=True, 
     db_index=True, 
    ) 

,我想过滤掉所有那些书,其作者是 A1(B2在这种情况下为

这是使用group by和的简单SQL条款,我有困难的时候是使用usinng django queryset和注释完成它。大部分注释工作在count附近,我无法适应这种特殊情况。

任何指针都很有帮助,谢谢! :)

+0

你可以发布Django模型吗? – solarissmoke

+0

@solarissmoke:加入 – NoobEditor

回答

1

这应该做你想要什么:

Books.objects.exclude(author='A1') 

如果你想book值的不同列表,那么你可以这样做:

Books.objects.exclude(author='A1').values_list('book').distinct() 

Books模型看起来有点怪我虽然。不确定您的具体用例是什么,但似乎Book模型的ManyToManyAuthor的关系可能更合适。

+0

它是一个传统模型,当这张桌子应该包含所有东西......没有正常化...... *我们先辈的罪恶在这里受到伤害*! :) – NoobEditor