Django - поле даты в форме ввода данных сбрасывается при редактировании
Я создал модель, форму и представления. Я добавил некоторые данные через форму. Затем, когда я хочу редактировать, все поля заполнены, но поле даты пустое. Я хочу увидеть дату, которую я добавил ранее. Но ничего нет. Я использую все решения ai, а также javascript, jquery, но ничего.
Как я могу решить эту проблему.
У меня есть такая модель и
class Cilt(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Kullanıcı")
birth_place = models.CharField(max_length=200, blank=True, null=True, verbose_name="Birth Place")
birth_date = models.DateField(blank=True, null=True, verbose_name="Birth date")
def __str__(self):
return f"{self.user.username}"
forms.py
class CiltForm(forms.ModelForm):
class Meta:
model = Cilt
exclude = ['user']
fields = '__all__'
widgets = {
'birth_place': forms.TextInput(attrs={'class': 'form-control'}),
'birth_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
def __init__(self, *args, **kwargs):
super(CiltForm, self).__init__(*args, **kwargs)
instance = kwargs.get('instance', None)
if instance:
initial_date = instance.ucuk_en_son_cikis_tarihi
self.fields['birth_date'].initial = initial_date
self.fields['birth_date'].widget = forms.DateInput(attrs={'class': 'form-control', 'type': 'date'})
редактировать виды
def cilt_duzenle(request, user_id):
ciltler = get_object_or_404(Cilt, user__id=user_id)
if request.method == 'POST':
form = CiltForm(request.POST, instance=ciltler)
if form.is_valid():
form.save()
return redirect('cilt_detay', user_id=user_id)
else:
form = CiltForm(instance=ciltler)
return render(request, 'cilt/cilt_duzenle.html', {'form': form})
Похоже, что дата, которую вы инициализируете, неверна.
initial_date = instance.ucuk_en_son_cikis_tarihi
Измените код следующим образом, чтобы решить проблему.
initial_date = instance.birth_date
Проблема вызвана:
'birth_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
.
Django отображает DateInput
как тип 'text'
вместо ожидаемого (тип 'date'
) из-за сложностей с этим вводом, поскольку есть проблемы с ним при использовании различных часовых поясов и форматов местного времени. Существуют способы справиться с этим, но я пока не нашел, как.
Однако, если вы можете обойтись без виджета календаря, то вам не нужно устанавливать тип date
, но вы потеряете виджет календаря справа от ввода даты:
Измените свою форму следующим образом:
class CiltForm(forms.ModelForm):
class Meta:
model = Cilt
exclude = ['user']
widgets = {
'birth_place': forms.TextInput(attrs={'class': 'form-control'}),
'birth_date': forms.DateInput(attrs={'class': 'form-control'}),
}