Как добавить пользовательский заголовок к полям формы django?
Я хочу добавить свой собственный заголовок в поля формы django, как на этом изображении.
Мой файл models.py
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
class Post(models.Model):
ad_soyad = models.CharField(max_length=255, default="")
tarih = models.CharField(max_length=255, default="")
dogum_tarihi = models.CharField(max_length=255, default="")
dogum_yeri = models.CharField(max_length=255, default="")
medeni_hali = models.CharField(max_length=255, default="")
birinci_evlilik = models.CharField(max_length=255, default="")
ikinci_evlilik = models.CharField(max_length=255, default="")
bosanma_tarihi = models.CharField(max_length=255, default="")
ogrenim_durumu = models.CharField(max_length=255, default="")
meslek = models.CharField(max_length=255, default="")
kan_grubu = models.CharField(max_length=255, default="")
boy = models.CharField(max_length=255, default="")
kilo = models.CharField(max_length=255, default="")
max_kilo = models.CharField(max_length=255, default="")
max_kilo_tarih = models.CharField(max_length=255, default="")
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = models.TextField()
def __str__(self):
return self.title + '|' + str(self.author)
def get_absolute_url(self):
# return reverse('article-detail', args=(str(self.id))) bu kod olursa yazı ekledikten sonra o eklenen yazıya gidiyor
return reverse('home')
И мой файл forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = '__all__'
#field = ('title', 'author')
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control'}),
'author': forms.Select(attrs={'class': 'form-control'}),
'body': forms.Textarea(attrs={'class': 'form-control'}),
'ad_soyad': forms.TextInput(attrs={'class': 'form-control'}),
'tarih': forms.TextInput(attrs={'class': 'form-control'}),
'dogum_tarihi': forms.TextInput(attrs={'class': 'form-control'}),
'dogum_yeri': forms.TextInput(attrs={'class': 'form-control'}),
'medeni_hali': forms.TextInput(attrs={'class': 'form-control'}),
'birinci_evlilik': forms.TextInput(attrs={'class': 'form-control'}),
'ikinci_evlilik': forms.TextInput(attrs={'class': 'form-control'}),
'bosanma_tarihi': forms.TextInput(attrs={'class': 'form-control'}),
'ogrenim_durumu': forms.TextInput(attrs={'class': 'form-control'}),
'meslek': forms.TextInput(attrs={'class': 'form-control'}),
'kan_grubu': forms.TextInput(attrs={'class': 'form-control'}),
'boy': forms.TextInput(attrs={'class': 'form-control'}),
'kilo': forms.TextInput(attrs={'class': 'form-control'}),
'max_kilo': forms.TextInput(attrs={'class': 'form-control'}),
'max_kilo_tarih': forms.TextInput(attrs={'class': 'form-control'}),
}
Наконец-то я нашел ответ. Добавив этот код в файл forms.py
labels = {
'ad_soyad': ('Ad Soyad'),
'dogum_tarihi': ('Doğum Tarihi'),
}
Вы можете сделать это на уровне модели, так, чтобы это было сделано для всех ModelForm для этой модели с помощью verbose_name=… [Django-doc]:
class Post(models.Model):
# …,
dogum_yeri = models.CharField(verbose_name='Doğum Tarihi', max_length=255, default="")
# …
Вы также можете указать атрибут labels у Meta у ModelForm, в таком случае эта метка, конечно, применима только к этой конкретной форме, а для других ModelForm для той же модели вам, таким образом, придется повторить маркировку:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = '__all__'
widgets = {
# …
}
labels = {
'dogum_yeri': 'Doğum Tarihi'
}
Я бы посоветовал сначала использовать verbose_name, и только если форма требует отклонения, указать labels для этого конкретного ModelForm.
