Saya memiliki DateField yang ingin saya terapkan nilai default yang memiliki hari dan bulan yang sama, tetapi tahun yang berbeda tergantung pada tanggal saat ini:

q1_results_date = models.DateField(
        verbose_name='Q1 financial results',
        default=datetime.datetime(
            datetime.datetime.now().year,
            3,
            calendar.monthrange(datetime.datetime.now().year, 3)[1]
        ),
        blank=False,
        null=True,
    )

Ini berfungsi sebagaimana dimaksud, namun saya mendapatkan kesalahan berikut:

q1_results_date: (fields.W161) Fixed default value provided.
HINT: It seems you set a fixed date / time / datetime value as default for this field. 
This may not be what you want. If you want to have the current date as default, use 
`django.utils.timezone.now`

Bagaimana saya bisa membungkam kesalahan ini?

0
alias51 1 Juli 2020, 15:22

1 menjawab

Jawaban Terbaik

Tentukan fungsi yang mengembalikan tanggal yang Anda inginkan:

def default_q1_results_date():
    return datetime.datetime(
            datetime.datetime.now().year,
            3,
            calendar.monthrange(datetime.datetime.now().year, 3)[1]
    )

Kemudian gunakan fungsi sebagai default:

q1_results_date = models.DateField(
        verbose_name='Q1 financial results',
        default=default_q1_results_date,
        ...
)

Saat ini, default dihitung sekali ketika model dimuat, dan tidak akan diperbarui. Dalam kasus Anda, Anda hanya akan melihat ini di tahun baru.

1
Alasdair 1 Juli 2020, 13:07