Как использовать рабочую неделю в поле 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)