Как исправить DateRangeFilter, чтобы виджет даты отображался правильно - PullRequest
0 голосов
/ 09 марта 2020

Используя администратора для моего проекта, я столкнулся с проблемой, что мой виджет даты (календарь) вообще не отображается в моей форме.

Я успешно установил django-admin-rangefilter и импортировал его.

моя модель

class Order(models.Model):
    stem_date = models.DateField("STEM")
    delivery_date = models.DateField("Delivery Date")

мой admin.py

from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter


list_filter = [('stem_date', DateRangeFilter), ('delivery_date', DateRangeFilter), ('cost_center')]

Я использую django версия = 2.2.6 и python версия 3.5.2

весь класс по порядку

class OrderAdmin(ReadPermissionModelAdmin):
    ### Default ordering with REF ###
    ordering = ('-ref',)
    #This Snippet is to order foreign key form fields
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
            if db_field.name == "port":
                    kwargs["queryset"] = Port.objects.order_by('port_name')
            if db_field.name == "customer":
                    kwargs["queryset"] = Customer.objects.order_by('customer_name')
            if db_field.name == "contact":
                    kwargs["queryset"] = Contact.objects.order_by('surname')
            return super(OrderAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

    actions = [export_model_as_csv]
    inlines = [Order_ProductsInline, Order_Product_ExtrasInline, Order_CommissionInline]
    #Function to make ref id readonly after save
    def get_readonly_fields(self, request, obj=None):
            if obj: # when editing an object
                    return ['ref']
            return self.readonly_fields
    #sos
    list_filter = [('stem_date', DateRangeFilter), ('delivery_date', DateRangeFilter), ('cost_center')]
    #list_filter = [('stem_date', DateRangeFilter), ('delivery_date', DateRangeFilter)]
    search_fields = ('customer__customer_name', 'vessel__ship_name', 'port__port_name', 'id', 'ref', 'supplier__customer_name')#if you look in foreign keys, must refferance with double underscore relevant field to other model
    list_display = ['ref', 'customer', 'supplier', 'vessel', 'port', 'cost_center', 'delivery_date', 'show_details','cancelled',]

    formfield_overrides = {
            models.DecimalField: {'widget': TextInput(attrs={'size':'6'})},
            models.BigIntegerField: {'widget': TextInput(attrs={'size':'6'})},
        }

    fieldsets = (
        (None, {
            'fields': (('ref'), ('customer', 'supplier'), ('vessel', 'imo', 'port', 'operator'), ('stem_date', 'delivery_date', 'contact'), 'cost_center', ('currency', 'bank_charges', 'branch'), ('cancelled'),('remarks'),)
            }),
        )

    list_per_page = 20

    #Function to show ID with 6 digits
    def order_id(self, obj):
        return str(obj.id).zfill(6)

    def show_details(self, obj):
        return_string = format_html('<a href="/private/intranet/orders/' + str(obj.id) + '/">Details</a>')
        return return_string
    show_details.allow_tags = True
    show_details.short_description = 'Details'


    def response_change(self, request, obj, post_url_continue=None):
    #This makes the response go to inquiry full detail page for an edited order
            return HttpResponseRedirect(reverse('orders', args=(obj.id,)))
            #return HttpResponseRedirect("../../orders/%s" % obj.id)

    def response_add(self, request, obj, post_url_continue=None):
    #This makes the response go to inquiry full detail page for a newlly added order to inquiry list
            return HttpResponseRedirect(reverse('orders', args=(obj.id,)))
            #return HttpResponseRedirect("../../orders/%s" % obj.id)#strip leading zeros


admin.site.register(Order, OrderAdmin)

У кого-нибудь есть идеи, почему мой виджет вообще не загружается?

1 Ответ

0 голосов
/ 09 марта 2020

Вы добавили rangefilter к вашему INSTALLED_APPS?

Если это так, попробуйте так:

from rangefilter.filter import DateRangeFilter
from .models import Order


@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_filter = (
        ('stem_date', DateRangeFilter), ('delivery_date', DateRangeFilter)
    )
...