Django:earliest()和latest()需要字段作为位置参数,或者在模型的Meta中使用'get_latest_by'

yrdbyhpb  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(107)

有没有人能解释一下这个错误是什么意思?
我在我的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.


任何人都可以请解释我什么是错误的,在我的代码和可能的解决方案,这样做的正确方式.
谢谢你

dpiehjr4

dpiehjr41#

如**latest(*fields)[Django-doc]文档中所述:
根据给定字段返回表中最新的对象
。**
此示例根据pub_date字段返回表中最新的Entry

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对象 maximumname(如果我们在这里按字典顺序比较名称)。

ecfdbz9o

ecfdbz9o2#

答案已经在Django文档中了
好吧,你遇到的错误,“ValueError:earliest()and latest()require either fields as positional arguments or 'get_latest_by' in the model's Meta”,是由于在行中使用了latest()方法:

context['selectdate_list'] = selectdate.objects.filter(User=self.request.user).latest()

字符串
要解决此问题,您需要在latest()方法中指定一个用于排序的字段,或者在模型的Meta类中定义get_latest_by属性。在SelectDate模型中(假设它是一个模型):

class SelectDate(models.Model):
    # your fields here

    class Meta:
        # Specify the field for ordering
        ordering = ['-your_date_field']


或者,在查询本身中,将字段作为参数传递给latest():

context['selectdate_list'] = selectdate.objects.filter(User=self.request.user).latest('your_date_field')

相关问题