Django:early() 和 latest() 需要模型的 Meta 中的字段作为位置参数或“get_latest_by”

Nil*_*Kar 2 python django django-views

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

我在我的 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
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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

任何人都可以向我解释我的代码有什么问题以及以正确方式执行它的可能解决方案......

谢谢

Wil*_*sem 5

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

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

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

Entry.objects.latest('pub_date')
Run Code Online (Sandbox Code Playgroud)

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

selectdate.objects.filter(
    User=self.request.user
).latest('updated_date')
Run Code Online (Sandbox Code Playgroud)

可以使用,无论在latest() 参数,给你指定的顺序为这个Meta类的模型,像:

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

    class Meta:
        get_latest_by = ['name']
Run Code Online (Sandbox Code Playgroud)

在这种情况下

Foo.objects.latest()
Run Code Online (Sandbox Code Playgroud)

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