如何在自定义 Django ModelChoiceField 上获取 help_text
How to get help_text on a custom Django ModelChoiceField
我正在创建一个 custom ModelChoiceField
以便我可以为我的外键显示自定义标签,但这样做时 Django 不再在表单上显示 help_text
。我怎样才能取回帮助文本?
models.py
class Event(models.Model):
title = models.CharField(max_length=120)
category = models.ForeignKey(Category, default=Category.DEFAULT_CATEGORY_ID, on_delete=models.SET_NULL, null=True,
help_text="By default, events are sorted by category in the events list.")
forms.py
class CategoryModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "%s (%s)" % (obj.name, obj.description)
class EventForm(forms.ModelForm):
category = CategoryModelChoiceField(
queryset=Category.objects.all(),
)
class Meta:
model = Event
fields = [...]
可以在Meta
里面加上。
from django.utils.translation import gettext_lazy as _
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
labels = {
'name': _('Writer'),
}
help_texts = {
'name': _('Some useful help text.'),
}
error_messages = {
'name': {
'max_length': _("This writer's name is too long."),
},
}
此外,您可以使用 __init__
方法添加。
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EventForm, self).__init__(*args, **kwargs)
self.fields['category'].help_text = ''
在问题下方评论的帮助下,以下是我如何获得自定义表单字段以从模型中获取默认帮助文本:
class EventForm(forms.ModelForm):
category = CategoryModelChoiceField(
queryset=Category.objects.all(),
help_text=Event._meta.get_field('category').help_text,
)
我正在创建一个 custom ModelChoiceField
以便我可以为我的外键显示自定义标签,但这样做时 Django 不再在表单上显示 help_text
。我怎样才能取回帮助文本?
models.py
class Event(models.Model):
title = models.CharField(max_length=120)
category = models.ForeignKey(Category, default=Category.DEFAULT_CATEGORY_ID, on_delete=models.SET_NULL, null=True,
help_text="By default, events are sorted by category in the events list.")
forms.py
class CategoryModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "%s (%s)" % (obj.name, obj.description)
class EventForm(forms.ModelForm):
category = CategoryModelChoiceField(
queryset=Category.objects.all(),
)
class Meta:
model = Event
fields = [...]
可以在Meta
里面加上。
from django.utils.translation import gettext_lazy as _
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
labels = {
'name': _('Writer'),
}
help_texts = {
'name': _('Some useful help text.'),
}
error_messages = {
'name': {
'max_length': _("This writer's name is too long."),
},
}
此外,您可以使用 __init__
方法添加。
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EventForm, self).__init__(*args, **kwargs)
self.fields['category'].help_text = ''
在问题下方评论的帮助下,以下是我如何获得自定义表单字段以从模型中获取默认帮助文本:
class EventForm(forms.ModelForm):
category = CategoryModelChoiceField(
queryset=Category.objects.all(),
help_text=Event._meta.get_field('category').help_text,
)