Django:设置生日只是给出月份和日期

ngynwnxp  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(133)

我对Django完全陌生
我想在管理面板一个字段,我们可以设置一个用户的生日只是通过给月和日.现在,我们只能给予日期,但这不是我想要的.我想例如2天和一个月的下拉菜单之一


的数据
我的用户模型看起来像这样
产品型号:

from django.contrib.auth.models import User


# Create your models here.
class Profile(models.Model):

    birthday = models.DateField(blank=True, null=True)

    def __str__(self):
        return f'{self.user.get_full_name()}'

字符串

sulc1iza

sulc1iza1#

我试着按照你的要求用**DateField()**解决这个问题
models.py

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    birthday = models.DateField(blank=True, null=True)

    def __str__(self):
        return f'{self.user.username}'

字符串
admin.py

from django import forms
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from .models import Profile
import datetime

class ProfileAdminForm(forms.ModelForm):
    birthday_month = forms.IntegerField(label='Birthday Month', widget=forms.Select(choices=[(i, i) for i in range(1, 13)]))
    birthday_day = forms.IntegerField(label='Birthday Day', widget=forms.Select(choices=[(i, i) for i in range(1, 32)]))
    birthday_year = forms.IntegerField(label='Birthday Year', widget=forms.Select(choices=[(i, i) for i in range(datetime.datetime.now().year - 200, datetime.datetime.now().year)]))

    class Meta:
        model = Profile
        fields = ['user', 'birthday_month', 'birthday_day', 'birthday_year']

class ProfileAdmin(admin.ModelAdmin):
    form = ProfileAdminForm
    list_display = ['user', 'birthday']

    def save_model(self, request, obj, form, change):
        month = form.cleaned_data['birthday_month']
        day = form.cleaned_data['birthday_day']
        year = form.cleaned_data['birthday_year']

        # Format the date as YYYY-MM-DD
        obj.birthday = f'{year:04d}-{month:02d}-{day:02d}'
        super().save_model(request, obj, form, change)

admin.site.register(Profile, ProfileAdmin)

class CustomUserAdmin(UserAdmin):
    pass

admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

浏览器预览


的数据

相关问题