Date field input show wrong dates like 31 February, what's the simplest / best solution to this?

I have this field:

birth_date = forms.DateField(label=‘Birth Date’, widget=forms.SelectDateWidget(years=years_range))

But in the form I see that one can select up 31 for any month including February.

Is there some best way, simple way to solve this in Django?

In Django? No.

For something like this, you’d need to use some JavaScript to enforce the constraints in the three separate fields.

Or, find some other JavaScript widget to handle date entry.

But Django itself has no control over what goes on in the browser.