【问题标题】:Filter by date in django在 django 中按日期过滤
【发布时间】:2021-09-25 13:31:08
【问题描述】:

我正在尝试按日期过滤交货指令表。特别是在Delivery Instructions中,表格数据将在创建后7天后被删除。所以在它的模型中,我使用 DateTimeField 作为日期时间格式。但是在其他模型(例如 Part)中,我使用了 DateField,并且在 views.py 中我编写了与下面相同的函数并且它可以工作。但是按日期过滤的交货说明问题不起作用。

filters.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

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

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)

谁能帮我看看怎么回事?提前谢谢你

【问题讨论】:

    标签: python django django-models django-filter


    【解决方案1】:

    您不需要在 Meta.fields 中指定您更改行为的字段 相反,您可以这样做:

    from django_filters import DateFilter
    
    created_data = DateFilter(field_name, lookup_expr="exact")
    

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 2013-08-16
      • 2016-07-10
      • 2020-03-25
      • 1970-01-01
      • 2014-02-26
      • 2023-03-23
      • 2020-05-25
      • 1970-01-01
      相关资源
      最近更新 更多