简体   繁体   English

按日期过滤 django

[英]Filter by date in django

I am trying to filter the delivery instruction table by date.我正在尝试按日期过滤交货说明表。 Especially only in Delivery Instructions, table data will be removed after 7 days after the creation.特别是只有在交货说明中,表格数据将在创建后 7 天后被删除。 So in its model, I used DateTimeField as a date-time format.所以在它的 model 中,我使用 DateTimeField 作为日期时间格式。 But in other models (eg Part), I used DateField, and in views.py I write the same function as below and it works.但是在其他模型(例如 Part)中,我使用了 DateField,并且在 views.py 中我编写了如下相同的 function 并且它有效。 But the issue with Delivery instructions is filtered by date is not working.但是按日期过滤交货说明的问题不起作用。

filters.py过滤器.py

class DIFilter(django_filters.FilterSet):
    created_date = django_filters.CharFilter( widget=forms.TextInput(attrs={
            'placeholder': 'YYYY-MM-DD'}))
    class Meta:
        model = DeliveryIns
        fields = ['product','supplier', 'created_date']

views.py视图.py

def get_queryset(self):
        queryset = self.model.objects.all().order_by('-id')
        if self.request.GET.get('supplier'):
            queryset = queryset.filter(supplier_id=self.request.GET.get('supplier'))
        elif self.request.GET.get('product'):
            queryset = queryset.filter(product_id=self.request.GET.get('product'))
            
        elif self.request.GET.get('created_date'):
            queryset = queryset.filter(created_date=self.request.GET['created_date'])

        return queryset

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['filter'] = DIFilter(self.request.GET, queryset=self.get_queryset())
        DeliveryIns._base_manager.filter(created_date__lt=timezone.now() - timezone.timedelta(days=7)).delete()
        return context

models.py模型.py

class DeliveryIns(models.Model):
    supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    created_date = models.DateTimeField(default=timezone.now)

class Part(models.Model): 
    supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    created_date = models.DateField(auto_now_add=True)

Can anyone help me out what's the matter?谁能帮我看看这是怎么回事? Thank you in advanced谢谢你先进

You do not need to specify the field which you change the behaviour in Meta.fields Instead you can do this:您不需要在 Meta.fields 中指定您更改行为的字段相反,您可以这样做:

from django_filters import DateFilter

created_data = DateFilter(field_name, lookup_expr="exact")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM