嘿,我已经浏览了一些关于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) 我正试图找到一种方法来实现自定义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.
有没有办法在不重新定义子类QuerySet和Manager子类中的所有方法的情况下执行此操作?
我有一个类似于以下的模型:
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)
并在视图中解析结果,但这对我来说似乎不对.
我有这个型号:
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) 我已经在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)
如何使它工作?谢谢.
我有一个这样的模型
class Task(models.Model):
progress = models.PositiveIntegerField()
estimated_days = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)
现在我想Sum(progress * estimated_days)在数据库级别进行计算.使用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)
这将返回一个单独包含所有投票的查询集,但我想获得每个项目的计票投票,任何人都知道如何做到这一点?谢谢
比方说,如果我有一个有很多领域的典范,但我只关心一个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}
希望有人会看到这个编辑...
显然,我的数据库(BigTable的)不支持的Django的聚合函数,这就是为什么我一直有所有问题.
我有一个工单的模型,有一个需要工作单的字段.要获得工作单列表,以及早期需要的工单,我这样做:
wo = Work_Order.objects.order_by('dateWORequired')
这很好用,但只有在该字段中实际存在值时才有效.如果没有必需的日期,则值为None.然后,工单的列表包含所有的None顶部,然后是正确顺序的剩余工单.
我怎样才能得到None底部的?
我正在使用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 - 获取组的最新记录, 但它没有帮助.
django ×10
django-queryset ×10
python ×3
django-orm ×2
distinct ×1
django-1.1 ×1
django-views ×1
field ×1