首页 > 解决方案 > Django:最早()和最新()需要字段作为位置参数或模型元数据中的“get_latest_by”

问题描述

谁能解释一下这个错误是什么意思?

我在views.py中做了这个:

class FormListView(FormMixin, ListView):
def get(self, request, *args, **kwargs):
    # From ProcessFormMixin
    form_class = self.get_form_class()
    self.form = self.get_form(form_class)

    # From BaseListView
    self.object_list = self.get_queryset()
    allow_empty = self.get_allow_empty()
    if not allow_empty and len(self.object_list) == 0:
        raise Http404(_(u"Empty list and '%(class_name)s.allow_empty' is False.")
                      % {'class_name': self.__class__.__name__})

    context = self.get_context_data(object_list=self.object_list, form=self.form)
    return self.render_to_response(context)

def post(self, request, *args, **kwargs):
    return self.get(request, *args, **kwargs)


class CompanyListView(LoginRequiredMixin,FormListView):
    model = Company
    form_class  = daterangeform
    paginate_by = 10

    def get_queryset(self):
        return company.objects.filter(User=self.request.user)

    def get_context_data(self, **kwargs):
        context = super(companyListView, self).get_context_data(**kwargs)
        context['selectdate_list'] = selectdate.objects.filter(User=self.request.user).latest()
        return context

我收到了这个错误:

ValueError: earliest() and latest() require either fields as positional arguments or 'get_latest_by' in the model's Meta.

谁能解释一下我的代码有什么问题以及以正确方式执行此操作的可能解决方案...

谢谢

标签: pythondjangodjango-views

解决方案


latest(*fields)[Django-doc]文档中所述:

根据给定字段返回表中的最新对象。

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

Entry.objects.latest('pub_date')

因此,如果您想获取有关某个字段的最新对象(例如updated_date),您可以将其写为:

selectdate.objects.filter(
    User=self.request.user
).latest('updated_date')

但是,您可以使用latest() 不带Meta参数的参数,前提是您在模型类中为此指定了顺序,例如:

class Foo(models.Model):
    name = models.CharField(max_length=20)

    class Meta:
        get_latest_by = ['name']

在这种情况下

Foo.objects.latest()

将给出具有最大值Foo的对象(如果我们在这里按字典顺序比较名称)。 name


推荐阅读