关于在order_by和中使用Django自定义模型方法属性的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于080:【Django数据库】QuerySetAPI详解-order_by:、D
关于在order_by和中使用Django自定义模型方法属性的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于080:【Django数据库】QuerySet API详解-order_by:、Django - 模型在字符串 'MM/DD/YYYY' 中有日期,在这种情况下我如何 order_by(date)?、Django 1.9 JSONField order_by、django F表达式、Q表达式、annotate、order_by等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 在order_by()中使用Django自定义模型方法属性(django orderby)
- 080:【Django数据库】QuerySet API详解-order_by:
- Django - 模型在字符串 'MM/DD/YYYY' 中有日期,在这种情况下我如何 order_by(date)?
- Django 1.9 JSONField order_by
- django F表达式、Q表达式、annotate、order_by
在order_by()中使用Django自定义模型方法属性(django orderby)
我目前正在学习Django,我的一些模型具有自定义方法来获取以特定方式格式化的值。是否可以使用order_by()在模型中定义为属性的这些自定义方法之一的值?
这是一个示例,演示如何实现该属性。
class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField(blank=True, verbose_name=''e-mail'') def _get_full_name(self): return u''%s %s'' % (self.first_name, self.last_name) full_name = property(_get_full_name) def __unicode__(self): return self.full_name
使用此模型,我可以执行以下操作:
>>> Author.objects.all()[<Author: John Doh>, <Author: Jane Doh>, <Author: Andre Miller>]>>> Author.objects.order_by(''first_name'')[<Author: Andre Miller>, <Author: Jane Doh>, <Author: John Doh>]
但是我不能:
>>> Author.objects.order_by(''full_name'')FieldError: Cannot resolve keyword ''full_name'' into field. Choices are: book, email, first_name, id, last_name
在这样的自定义属性上使用order_by的正确方法是什么?
答案1
小编典典不,你不能那样做。order_by
是在数据库级别应用的,但是数据库对您的自定义Python方法一无所知。
您可以使用单独的字段进行排序:
Author.objects.order_by(''first_name'', ''last_name'')
或在Python中进行排序:
sorted(Author.objects.all(), key=lambda a: a.full_name)
080:【Django数据库】QuerySet API详解-order_by:
QuerySet API详解-order_by:
order_by
:指定将查询的结果根据某个字段进行排序。如果要倒叙排序,那么可以在这个字段的前面加一个负号。示例代码如下:
# 时间从前往回排:
# orders = BookOrder.objects.order_by("create_time")
# 时间从后往前排(与上面相反):
orders = BookOrder.objects.order_by("-create_time")
# 时间从后往前排,如果时间相同再按照价格排:
# orders = BookOrder.objects.order_by("-create_time", "price")
# 根据订单图书的评分进行排序:
# orders = BookOrder.objects.order_by("book__rating")
# 根据图书销量进行排序:
orders = Book.objects.annotate(book_sum=Count("bookorder")).order_by("book_sum") # 这里的bookorder和bookorder__id是一样的
for item in orders:
print(item.id, item.name, item.book_sum)
return HttpResponse("success")
一定要注意的一点是,多个order_by
,会把前面排序的规则给打乱,而使用后面的排序方式。比如以下代码:
orders = BookOrder.objects.order_by("-create_time").order_by("price")) # 不要写成如下格式:
它只会根据作者的名字进行排序,而不是使用文章的创建时间。
Django - 模型在字符串 'MM/DD/YYYY' 中有日期,在这种情况下我如何 order_by(date)?
如何解决Django - 模型在字符串 ''MM/DD/YYYY'' 中有日期,在这种情况下我如何 order_by(date)??
我的模型带有“MM/DD/YYYY”格式的字符串日期信息。我想查询此型号并在此日期前订购。
但为了做到这一点,我需要将此日期转换为 django 可读的格式。我知道我可以在我的模型中添加额外的字段并制作一个脚本,用日期时间格式填充这个字段,但我想在进行查询时这样做(如果可能),因为这不会被使用太多。
有一次我用这种代码解决了类似的问题:
sorted(information,key=lambda k: pendulum.from_format(k[''date''],''MMMM DD,YYYY''))
pendulum.from_format
中的 sorted()
让我在一行中“即时”执行此操作。我想知道我是否可以以某种方式将这个 order_by()
合并到 Django pendulum.from_format
中?
解决方法
您应该在 models.py
from django.db import models
class MyModel(models.Model):
my_date = models.DateField()
然后您可以轻松保存它(例如在您的 view.py
的逻辑中)
from datetime import datetime
try:
input_date = datetime.strptime(my_record,''%d %m,%Y'')
instance.my_date = input_date
instance.save()
except ValueError:
print("format not valid")
或使用 Django queryset
调用它(以便您也可以轻松对其进行排序)。
此外,如果您在某处有表单,您还可以验证 forms.py
class MyForm(forms.ModelForm):
my_date = forms.DateField(input_formats=YOUR_DATE_INPUT_FORMAT)
Django 1.9 JSONField order_by
我有以下包含JSONField的django模型:
class RatebookDataEntry(models.Model):
data = JSONField(blank=True,default=[])
last_update = models.DateTimeField(auto_now=True)
class Meta:
verbose_name_plural = 'Ratebook data entries'
并且 数据 字段包含此json:
{
"annual_mileage": 15000,"description": "LEON DIESEL SPORT COUPE","body_style": "Coupe","range_name": "LEON","co2_gkm_max": 122,"manufacturer_name": "SEAT"
}
我可以按数据字段之一对queryset进行排序吗?此查询不起作用。
RatebookDataEntry.objects.all().order_by("data__manufacturer_name")
django F表达式、Q表达式、annotate、order_by
如下模型:
class Book(models.Model):
name = models.CharField(max_length=100)
pages = models.IntegerField()
price = models.FloatField()
author = models.ForeignKey(''Author'',on_delete=CASCADE)
class Meta:
db_table=''book''
class Author(models.Model):
author=models.CharField(max_length=100)
class Meta:
db_table=''author''
按书的价格排序(默认升序):books=Book.objects.order_by(''price'')
按书的价格倒序排序:books=Book.objects.order_by(''-price'')
按书的价格和页数升序排序:books=Book.objects.order_by(''price'',''pages'')
多个 order_by,后面会把前面的排序规则打乱,而使用后面的排序方式,比如下面这个,会根据作者的名字进行排序,而不是使用文章的创建时间排序
articles = Article.objects.order_by("create_time").order_by("author__name")
关于在order_by和中使用Django自定义模型方法属性的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于080:【Django数据库】QuerySet API详解-order_by:、Django - 模型在字符串 'MM/DD/YYYY' 中有日期,在这种情况下我如何 order_by(date)?、Django 1.9 JSONField order_by、django F表达式、Q表达式、annotate、order_by等相关内容,可以在本站寻找。
本文标签: