标签: django-queryset

django queryset排除第二个模型中的条目

我正在制作一个小词汇测验应用程序,一个单词的基本模型是这样的:

class Word(models.Model):
    id = models.AutoField(primary_key=True)
    word = models.CharField(max_length=80)
    id_image = models.ForeignKey(Image)
    def __unicode__(self):
        return self.word
    class Meta:
        db_table = u'word'
Run Code Online (Sandbox Code Playgroud)

我目前正在自我测验的单词模型是这样的:

class WordToWorkOn(models.Model):
    id = models.AutoField(primary_key=True)
    id_student = models.ForeignKey(Student)
    id_word = models.ForeignKey(Word)
    level = models.IntegerField()
    def __unicode__(self):
        return u'%s %s' % (self.id_word.__unicode__(), self.id_student.__unicode__() )
    class Meta:
        db_table = u'word_to_work_on'
Run Code Online (Sandbox Code Playgroud)

"水平"表示我学到了多少.我已经学过的一组单词有这个模型:

class WordLearned(models.Model):
    id = models.AutoField(primary_key=True)
    id_word = models.ForeignKey(Word, related_name='word_to_learn')
    id_student = models.ForeignKey(Student, related_name='student_learning_word')
    def __unicode__(self):
        return u'%s %s' % (self.id_word.__unicode__(), self.id_student.__unicode__() )
    class Meta:
        db_table = u'word_learned'
Run Code Online (Sandbox Code Playgroud)

当WordToWorkOn上的查询集返回时结果太少(因为它们已经足够好地学习以便移动到WordLearned并从WordToWorkOn中删除),我想找到要添加到其中的Word.我不知道一个好方法的部分是将它限制为尚未在WordLearned中的单词.

所以,一般来说,我想我想在一个单词的查询集上做某种类型的.exclude(),但它需要根据WordLearned表中的成员资格进行排除.有没有办法做到这一点?我发现有很多关于加入查询集的参考资料,但是找不到一个关于如何做到这一点的好文章(可能只是不知道要搜索的正确术语). …

django django-models django-queryset

0
推荐指数
1
解决办法
5274
查看次数

django从多个表连接查询集

如果我对多个表有查询,例如:

d = Relations.objects.filter(follow = request.user).filter(date_follow__lt = last_checked)
r = Reply.objects.filter(reply_to = request.user).filter(date_reply__lt = last_checked)
article = New.objects.filter(created_by = request.user)
vote = Vote.objects.filter(voted = article).filter(date__lt = last_checked)
Run Code Online (Sandbox Code Playgroud)

我希望显示按日期排序的所有结果(我的意思是不列出所有回复,然后是所有投票等).不知何故,我想在一个查询集中"加入所有这些结果".有可能吗?

django join django-queryset

0
推荐指数
1
解决办法
6237
查看次数

Django Query - start = end

在模型中我有开始和结束日期.如何获得开始和结束日期的所有元素是不同的.

>>> Entry.objects.exclude(start = end)
>>> NameError: name 'end' is not defined
Run Code Online (Sandbox Code Playgroud)

我不知道请帮忙.

django django-models django-queryset

0
推荐指数
1
解决办法
171
查看次数

如何在Django中创建一个WHERE/something_else查询?

我已经快速浏览了以下文档,看看如何WHERE ... OR在Django中进行查询.但我找不到它,也许我太累了.所以我在这里问它.

django django-models django-queryset

0
推荐指数
1
解决办法
43
查看次数

将Django 1.8中复杂子查询的结果注释为QuerySet

我必须遵循数据库架构:

main_account
- username

invoice
- amount
- currency: 'EUR' or 'USD' or 'GBP'
- username (main_account has many invoices)

我的目标是以美元列出"最高支付者".因此,我必须从发票表中计算每个用户的"total_paid"总和(并考虑货币转换).我也想通过这个"total_paid"来过滤.

我当前的SQL看起来像:

SELECT main_account.username, total_paid
FROM main_account JOIN
(
    SELECT username,
        (SELECT SUM(amount) FROM invoice WHERE main_account.username = invoice.username AND invoice.currency = 'EUR') AS total_eur,
        (SELECT SUM(amount) FROM invoice WHERE main_account.username = invoice.username AND invoice.currency = 'USD') AS total_usd,
        (SELECT SUM(amount) FROM invoice WHERE main_account.username = invoice.username AND invoice.currency = 'GBP') AS total_gbp,
        (SELECT (IFNULL(total_usd,0) + 1.12 * IFNULL(total_eur,0) + …
Run Code Online (Sandbox Code Playgroud)

mysql sql django django-orm django-queryset

0
推荐指数
1
解决办法
1524
查看次数

django - 为房地产项目建立过滤器

为了练习我学到的东西,我开始了一个关于房地产网站的django项目.

下一步是构建搜索页面,用户可以选择multiple filters,对于为例,number of rooms,baths,area,city...

在我读的书中,我使用了搜索引擎(带有django haystack的Sorl),所以我想知道是否应该使用它来过滤数据库上的用户条件,或者我是否应该只使用djando查询来保持简单ifs.

你有什么建议我的?

django django-queryset django-haystack

0
推荐指数
1
解决办法
188
查看次数

如何通过带数字的字段在Django中订购QuerySet?

我想通过一个包含数字的字段来命令QuerySet.我有这个代码:

MyTable.objects.all().order_by('my_char_field')
Run Code Online (Sandbox Code Playgroud)

有一些"my_char_field"的例子:

"ver3", "ver10", "x5.1 (1)", "ver4", "x5.1 (2)"
Run Code Online (Sandbox Code Playgroud)

上面代码的顺序结果是:

"ver10", "ver3", "ver4", "x5.1 (1)", "x5.1 (2)"
Run Code Online (Sandbox Code Playgroud)

但我想要的顺序是:

"ver3", "ver4", "ver10", "x5.1 (1)", "x5.1 (2)"
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得自然顺序?

python django django-queryset

0
推荐指数
1
解决办法
1055
查看次数

使用django查询不违反DRY的重构方法?

我写了一个查询具有已知查找类型的模型.表示输入类型传递的标志kwargs.下面kwarg将解释查找以及传递的kwargs.

  1. 数据库哈希(随机对实例没有唯一性db_hash=True)
  2. 对象的名称("John"或"Sam"为name=True)
  3. 对象的ID.(obj.ids 124,或134as id=True)
  4. 实例(没有任何标志的objs)

例如,只是为了方法调用的名称,

self.check_all_routes("Sam", "452", name=True)
Run Code Online (Sandbox Code Playgroud)

我想重构下面的方法来减少它在违反DRY时产生的混乱.

def check_all_routes(self, driver, route, **kwargs):
    _hash = kwargs.get('db_hash')
    _name = kwargs.get('name')
    _id = kwargs.get('id')

    if _hash:
        return self.model.objects.filter(
            driver__db_hash=driver,
            route__db_hash=route
        ).prefetch_related().select_related().values_list('route_number')
    if _name:
        return self.model.objects.filter(
            driver__name=driver,
            route__name=route
        ).prefetch_related().select_related().values_list('route_number')
    if _id:
        return self.model.objects.filter(
            driver_id=driver,
            route_id=route
        ).prefetch_related().select_related().values_list('route_number')

    return self.model.objects.filter(
        driver=driver,
        route=route
    ).prefetch_related().select_related().values_list('route_number')
Run Code Online (Sandbox Code Playgroud)

可以做些什么来使它不违反DRY.

python django refactoring dry django-queryset

0
推荐指数
1
解决办法
69
查看次数

使用annotate()包含django模型对象属性

我有一个模型,其中包含一个@property当我做类似 vals = MyModel.objects.values() S / O帖子之类的事情时要包含 的模型,建议这样做的get_queryset方法是通过覆盖manager类的方法,并增加对的调用annotate(xtra_field=...)

问题是我找不到如何使用模型属性执行此操作的示例。我已经尝试过类似的东西 super(SuperClass, self).get_queryset().annotate(xtra_fld=self.model.xtra_prop) 及其众多变体,但都无济于事。

我认为问题是注释参数的RHS应该是什么?

(而且,是的,我知道还有其他更笨拙的方法可以做到这一点,例如遍历values()返回的收益并随便添加属性。对我来说,这不是一个非常优雅(甚至是Django)的解决方案。

django model properties annotate django-queryset

0
推荐指数
1
解决办法
1954
查看次数

如何为未知属性设置Django模型架构?

我有一个人物模型。

class Person(models.Model):
    name_first = models.CharField(max_length=100)
    name_middle = models.CharField(max_length=100, null=True, blank=True)
    name_last = models.CharField(max_length=100)
    date_birth = models.DateField(null=True, blank=True)
    date_death = models.DateField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其扩展到音乐界的不同角色:作曲家,表演者和赞助人。

一个人可以是一个,两个或所有三个角色。如果某人是表演者,我还需要为该人分配一种或多种乐器。在实例化时,您可能不知道某人是否是表演者。否则他们的角色会随着时间而改变。

我希望能够搜索并显示一个人(如果他是三个人)既是作曲家,钢琴家又是赞助人。例如:贝多芬是指挥,作曲家和钢琴家。

我对实现的最初想法是继承Person类。

class Composer(Person):
    pass

class Performer(Person):
    instrument = models.ManyToManyField(Instrument, verbose_name=_('instrument'), blank=True,)

class Patron(Person):
    pass

class Instrument(models.Model):
    name = models.CharField(max_length=100, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

问题1:我应该改用某种抽象模型吗?如果是这样,我将如何处理?

问题2:我如何寻找一个人,并知道他们是否是作曲家,赞助人和/或表演者,以及他们是哪种表演者。

谢谢。

django django-models django-queryset

0
推荐指数
1
解决办法
174
查看次数