Как использовать рабочую неделю в поле DateField в Django admin

В моей модели я говорю:

class Foo(models.Model):
   start = models.DateField(help_text='Start Date')

В админке django при добавлении нового объекта Foo я вижу текстовое поле с прикрепленным календарем, позволяющим выбрать дату. Я хочу немного изменить это, чтобы я мог либо выбрать дату из календаря, либо ввести что-то вроде WW12'22 в текстовое поле, и во время Save оно будет преобразовано в DateField. Я не уверен, как реализовать это в админке django. Любые идеи будут полезны.

Вы можете создать свой собственный подкласс DateField и когда предоставленное значение не будет разобрано как дата, вы реализуете свой собственный разбор.

Поскольку вам нужно указать день недели, чтобы использовать номер недели при разборе, замените часть ввода "WW" на 1 и разберите это как день недели (1 будет понедельник)

admin.py

import re
import datetime

from django.contrib import admin
from django import forms

from .models import Foo
from django.contrib.admin.widgets import AdminDateWidget

class MyDateField(forms.DateField):
    def to_python(self, value):
        try:
            return super().to_python(value)
        except forms.ValidationError:
            if re.match(r'WW\d+\'\d+', value):
                return datetime.datetime.strptime(value.replace('WW', '1-'), '%w-%W\'%y')
            raise


class FooForm(forms.ModelForm):

    start_date = MyDateField(widget = AdminDateWidget)

    class Meta:
        model = Foo
        fields = '__all__'


class FooAdmin(admin.ModelAdmin):
    form = FooForm


admin.site.register(Foo, FooAdmin)
Вернуться на верх