Почему значения базы данных не отображаются в форме администратора?

#django #django-models #django-views #django-forms #django-admin

Вопрос:

Я новичок. У меня есть поле длительности в моем models.py. Я переопределил атрибут виджета поля в admin.py. Мне нужно поле длительности в качестве поля выбора без изменения поля длительности в models.py файл.

Итак, я переопределил это поле виджетом «Поле выбора», чтобы оно отображалось в виде выпадающего списка, ограниченного пятью днями. Когда я нажимаю «Сохранить в администраторе», данные сохраняются в базе данных, мой виджет не обновляется значениями, сохраненными в базе данных. Я публикую изображения и код для справки.

 class ManagedAccountAdmin(admin.ModelAdmin):  form = ManagedUserAdminForm  model = ManagedAccount  exclude = ('customer', 'created_by', 'modified_by', 'verification_code')  formfield_overrides = {  models.DurationField: {"widget": forms.Select(choices=((str(i) " day",str(i) " Day")   if i==1 else ((str(i) " days", str(i) " Days")) for i in range(1,6)))  }}  def get_form(self, request, obj=None, **kwargs):  form = super(ManagedAccountAdmin, self).get_form(request, obj, **kwargs)  for field in form.base_fields.keys():  form.base_fields[field].widget.can_change_related = False  form.base_fields[field].widget.can_add_related = False  return form  def save_model(self, request, obj, form, change):  obj.program = form.cleaned_data.get('program')  obj.managed_by = form.cleaned_data.get('managed_by')  obj.created_by = request.user  obj.duration_in_days = form.cleaned_data.get('duration_in_days')  print("duration in save model",obj.duration_in_days)  if change:  obj.modified_by = request.user  obj.save()  class ManagedUserAdminForm(forms.ModelForm): #duration = forms.ChoiceField(choices= ((str(i) " day",str(i) " Day") if i==1 else ((str(i) " days",str(i) " Days")) for i in range(1,6))) class Meta:  model = ManagedAccount  fields = ['managed_by','program','duration_in_days','is_verified','is_active','is_first_login']  #widgets = {'duration_in_days': forms.Select(choices=DURATION_CHOICES)} #ignore commented codes as I have used in admin.py  #widgets = {'duration_in_days': CustomDurationField()} #ignore this too  def clean_duration_in_days(self, *args, **kwargs):  duration_in_days = self.cleaned_data.get('duration_in_days')  print("duration in days",duration_in_days)  print(type(duration_in_days))  if duration_in_days lt; timedelta(days=1) or duration_in_days gt; timedelta(days=3):  raise forms.ValidationError(  "Minimum duration is 1 day, maximum is 3 days. Please enter in Days(D HH:MM:SS).")  return duration_in_days  class ManagedAccount(AbstractDateBase, AbstractUserBase): #ignore indentation it is fine in my file   managed_by = models.ForeignKey(User, on_delete=models.CASCADE,  limit_choices_to={'is_staff': True}) program = models.ForeignKey('rewards.Program', on_delete=models.CASCADE,  related_name='customer_program') customer = models.ForeignKey('rewards.CustomerAccount', null=True,  blank=True,  on_delete=models.CASCADE) verification_code = models.CharField(max_length=8) duration_in_days = models.DurationField(default=datetime.timedelta(days=3)) is_verified = models.BooleanField(default=False) is_active = models.BooleanField(default=True) is_first_login = models.BooleanField(  default=False,  help_text='To check if the user logs in for first time')  

Что я сделал, так это то, что у меня есть поле длительности, которое я преобразовал в поле выбора для отображения в admin.py. После отправки данных из выпадающего списка они сохраняются в БД, но не обновляются в выпадающем списке. Прикрепление изображений:

введите описание изображения здесь

Как вы можете видеть, по умолчанию отображается 1 день. Я меняю его на два дня и нажимаю «Сохранить», по-прежнему отображая как 1 день.