标签: django-queryset

'RelatedManager'对象不是可迭代的Django

嘿,我已经浏览了一些关于SO的一些simliar帖子,但还没有找到解决我问题的任何东西.我有以下型号,

from django.db import models

class Areas(models.Model):

    name =  models.CharField(max_length = 120)
    order_in_sidebar_network = models.IntegerField(blank=True, null=True)
    order_in_section_network = models.IntegerField(blank=True, null=True)


    def __unicode__ (self):
        return self.area_name

    class Meta:
        verbose_name_plural = "Areas"
        verbose_name = "Area"

class Countries(models.Model):
    name = models.CharField(max_length = 120, help_text = "The name of the country")
    area = models.ForeignKey(Areas, verbose_name = 'Area')

    def __unicode__ (self):
        return self.name

    class Meta:
        verbose_name_plural = "Countries"
        verbose_name = "Country"
        ordering = ['name']



class Offices(models.Model):
    country = models.ForeignKey(Countries, verbose_name = 'Country')
    name = models.CharField(max_length …
Run Code Online (Sandbox Code Playgroud)

django django-models django-queryset django-views

51
推荐指数
3
解决办法
4万
查看次数

自定义QuerySet和Manager而不会破坏DRY?

我正试图找到一种方法来实现自定义QuerySet和自定义Manager而不会破坏DRY.这是我到目前为止:

class MyInquiryManager(models.Manager):
    def for_user(self, user):
        return self.get_query_set().filter(
                    Q(assigned_to_user=user) |
                    Q(assigned_to_group__in=user.groups.all())
                )

class Inquiry(models.Model):   
    ts = models.DateTimeField(auto_now_add=True)
    status = models.ForeignKey(InquiryStatus)
    assigned_to_user = models.ForeignKey(User, blank=True, null=True)
    assigned_to_group = models.ForeignKey(Group, blank=True, null=True)
    objects = MyInquiryManager()
Run Code Online (Sandbox Code Playgroud)

这很好,直到我做这样的事情:

inquiries = Inquiry.objects.filter(status=some_status)
my_inquiry_count = inquiries.for_user(request.user).count()
Run Code Online (Sandbox Code Playgroud)

这会立即打破一切,因为QuerySet它没有相同的方法Manager.我已经尝试创建一个自定义QuerySet类,并在其中实现它MyInquiryManager,但我最终复制了所有的方法定义.

我也发现这个片段有效,但我需要传递额外的参数,for_user因此它会因为重新定义而严重依赖get_query_set.

有没有办法在不重新定义子类QuerySetManager子类中的所有方法的情况下执行此操作?

django django-models django-queryset django-managers

49
推荐指数
5
解决办法
3万
查看次数

在Django中按日期计算记录数

我有一个类似于以下的模型:

class Review(models.Model):
    venue = models.ForeignKey(Venue, db_index=True)
    review = models.TextField()  
    datetime_created = models.DateTimeField(default=datetime.now)
Run Code Online (Sandbox Code Playgroud)

我想查询数据库以获得按天分组的场地的评论总数.MySQL查询将是:

SELECT DATE(datetime_created), count(id) 
FROM REVIEW 
WHERE venue_id = 2
GROUP BY DATE(datetime_created);
Run Code Online (Sandbox Code Playgroud)

在Django中实现这一目标的最佳方法是什么?我可以用

Review.objects.filter(venue__pk=2)
Run Code Online (Sandbox Code Playgroud)

并在视图中解析结果,但这对我来说似乎不对.

python django django-models django-queryset django-1.1

48
推荐指数
4
解决办法
2万
查看次数

按字段获取Queryset的不同值

我有这个型号:

class Visit(models.Model):
    timestamp  = models.DateTimeField(editable=False)
    ip_address = models.IPAddressField(editable=False)
Run Code Online (Sandbox Code Playgroud)

如果用户在一天内多次访问,如何根据ip字段筛选唯一行?(我想今天的独特访问)

today = datetime.datetime.today()
yesterday = datetime.datetime.today() - datetime.timedelta(days=1)

visits = Visit.objects.filter(timestamp__range=(yesterday, today)) #.something?
Run Code Online (Sandbox Code Playgroud)

编辑:

我看到我可以使用:

Visit.objects.filter(timestamp__range=(yesterday, today)).values('ip_address')
Run Code Online (Sandbox Code Playgroud)

获取只有ip字段的ValuesQuerySet.现在我的QuerySet看起来像这样:

[{'ip_address': u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}, {'ip_address':
 u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}]
Run Code Online (Sandbox Code Playgroud)

如何在不评估QuerySet和获取数据库命中的情况下过滤此唯一性?

# Hope it's something like this...
values.distinct().count()
Run Code Online (Sandbox Code Playgroud)

django field distinct django-queryset

48
推荐指数
3
解决办法
6万
查看次数

Django:prefetch_related()是否遵循反向关系查找?

我已经在trunk中尝试了django 1.4中的prefetch_related(),并且无法使其预取反向查找.

我的简化模型(每本书都有很多价格):

class Book(models.Model):
    # some fields

class Price(models.Model):
    book = models.ForeignKey(Book)
Run Code Online (Sandbox Code Playgroud)

我的观点是:

books = Book.objects.prefetch_related('price')
Run Code Online (Sandbox Code Playgroud)

然后,我收到了AttributeError消息:

AttributeError: Cannot find 'price' on Book object, 'price' is an invalid parameter to prefetch_related()
Run Code Online (Sandbox Code Playgroud)

如何使它工作?谢谢.

django django-models django-queryset

48
推荐指数
2
解决办法
2万
查看次数

Django聚合:两个字段的乘法求和

我有一个这样的模型

class Task(models.Model):
    progress = models.PositiveIntegerField()
    estimated_days = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)

现在我想Sum(progress * estimated_days)在数据库级别进行计算.使用Django聚合我可以得到每个字段的总和,但不能得到字段乘法的总和.

python django django-models django-orm django-queryset

48
推荐指数
3
解决办法
3万
查看次数

在django中获取查询集中的对象计数

如何为数据库中的对象计数添加字段.我有以下型号:

class Item(models.Model):
    name = models.CharField()

class Contest(models.Model);
    name = models.CharField()

class Votes(models.Model):
    user = models.ForeignKey(User)
    item = models.ForeignKey(Item)
    contest = models.ForeignKey(Contest)
    comment = models.TextField()
Run Code Online (Sandbox Code Playgroud)

要查找竞赛A的投票,我在我的视图中使用以下查询

current_vote = Item.objects.filter(votes__contest=contestA)
Run Code Online (Sandbox Code Playgroud)

这将返回一个单独包含所有投票的查询集,但我想获得每个项目的计票投票,任何人都知道如何做到这一点?谢谢

django django-models django-queryset

47
推荐指数
2
解决办法
9万
查看次数

django在查询中计算相同字段值的最有效方法

比方说,如果我有一个有很多领域的典范,但我只关心一个charfield.让说charfield可以是任何东西,所以我不知道可能的值,但我知道,频繁的值重叠.所以,我可以有20个对象与"ABC"和10个对象与"XYZ"我也可以有"高清"和80"STU" 50个对象和我有40000没有重叠,我真的不关心.

如何有效地计算对象?我想要归还的是:

{'abc':20,'xyz':10,'其他':10,000}

或类似的东西,没有进行大量的SQL调用.

编辑:

我不知道是否有人会看到这个,因为我编辑它有点晚了,但是......

我有这个型号:

class Action(models.Model):
    author = models.CharField(max_length=255)
    purl = models.CharField(max_length=255, null=True)

从答案中,我做到了这一点:

groups = Action.objects.filter(author='James').values('purl').annotate(count=Count('purl'))

但...

这是什么组:

{"purl": "waka"},{"purl": "waka"},{"purl": "waka"},{"purl": "waka"},{"purl": "mora"},{"purl": "mora"},{"purl": "mora"},{"purl": "mora"},{"purl": "mora"},{"purl": "lora"}

(我只是用虚拟值填充了purl)

我想要的是什么

{'waka': 4, 'mora': 5, 'lora': 1}

希望有人会看到这个编辑...

编辑2:

显然,我的数据库(BigTable的)不支持的Django的聚合函数,这就是为什么我一直有所有问题.

django django-models django-queryset

45
推荐指数
3
解决办法
3万
查看次数

Django按日期排序,但最后有"无"?

我有一个工单的模型,有一个需要工作单的字段.要获得工作单列表,以及早期需要的工单,我这样做:

wo = Work_Order.objects.order_by('dateWORequired')

这很好用,但只有在该字段中实际存在值时才有效.如果没有必需的日期,则值为None.然后,工单的列表包含所有的None顶部,然后是正确顺序的剩余工单.

我怎样才能得到None底部的?

django django-models django-queryset

45
推荐指数
3
解决办法
1万
查看次数

Django orm获得每个组的最新消息

我正在使用django 1.6与Mysql

我有这个型号

class Student(models.Model):
     username = models.CharField(max_length=200, unique = True)

class Score(models.Model)
     student = models.ForeignKey(Student)
     date = models.DateTimeField()
     score = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

现在我想获得每个学生的最新成绩记录.
我试过了

Score.objects.values('student').annotate(latest_date=Max('date'))
Run Code Online (Sandbox Code Playgroud)

我也试过了

Score.objects.values('student__username').annotate(latest_date=Max('date'))
Run Code Online (Sandbox Code Playgroud)

如描述Django ORM - 获取组的最新记录, 但它没有帮助.

python django django-orm django-queryset

44
推荐指数
3
解决办法
2万
查看次数