Django - 创建最后一个对象,同步过滤器

zdy*_*dyn 38 python django filter django-views

道歉,我是Django和Python的新手.

我有两个问题.首先,我将如何在对象列表中创建最后一个对象(或最高pk)?例如,我知道我可以使用以下内容来获取第一个对象:

list = List.objects.all()[0]
Run Code Online (Sandbox Code Playgroud)

有没有办法获得List.objects的长度?我已经尝试过List.objects.length,但无济于事.

其次,是否可以创建同时过滤器或组合列表?这是一个例子:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number)
Run Code Online (Sandbox Code Playgroud)

我想要像上面这样的东西,但更像是:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number or home_phone=number)
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法,如果有的话?

hug*_*own 58

我还没有尝试过,但是我会在QuerySets上查看latest()运算符:

最新(FIELD_NAME =无)

使用作为日期字段提供的field_name,按日期返回表中的最新对象.

此示例根据pub_date字段返回表中的最新条目:

Entry.objects.latest( 'PUB_DATE')

如果模型的Meta指定了get_latest_by,则可以将field_name参数保留为latest().Django默认使用get_latest_by中指定的字段.

与get()一样,如果对象不存在给定参数,则latest()会引发DoesNotExist.

注意最新()存在纯粹为了方便和可读性.

get_latest_by上模型文档:

get_latest_by

Options.get_latest_by

模型中DateField或DateTimeField的名称.这指定了在模型管理器的最新方法中使用的默认字段.

例:

get_latest_by ="order_date"

有关更多信息,请参阅最新()的文档.

编辑:韦德对Q()运算符有一个很好的答案.


Har*_*rry 34

这个有效!

Model.objects.latest('field') - 字段可以是id.这将是最新的身份证

  • 看起来有点像我之前四个月写的答案,不是吗? (10认同)
  • 你并没有完全激发人们对_I还没有尝试过的信心.答案是这样的. (10认同)

jcd*_*yer 16

对于最大的主键,请尝试以下方法:

List.objects.order_by('-pk')[0]
Run Code Online (Sandbox Code Playgroud)

请注意,pk无论定义为主键的字段的实际名称如何,都可以使用.


pun*_*lly 15

自Django 1.6以来 - 最后

last()

first(),但返回查询集中的最后一个对象.

返回查询集匹配的最后一个对象,或者None是否没有匹配的对象.如果QuerySet没有定义排序,则主键会自动排序查询集.

list = List.objects.last() 为您提供最后创建的对象