代码之家  ›  专栏  ›  技术社区  ›  43Tesseracts

如何获取有关自定义Django ModelChoiceField的帮助文本

  •  1
  • 43Tesseracts  · 技术社区  · 7 年前

    我正在创建一个 custom ModelChoiceField 因此,我可以为我的外键显示自定义标签,但这样,django不再显示 help_text 在表格上。我如何才能取回帮助文本?

    型号.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.")
    

    表格.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 = [...]
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   seuling    7 年前

    你可以在里面添加它 Meta 。如下所示

    从django.utils.translation导入gettext\u 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."),
                },
            }
    

    (见 django docs

    此外,还可以添加 __init__ 方法。如下所示

    class EventForm(forms.ModelForm):
    
        def __init__(self, *args, **kwargs):
            super(EventForm, self).__init__(*args, **kwargs)
            self.fields['category'].help_text = ''
    
        2
  •  0
  •   43Tesseracts    7 年前

    在下面问题的注释的帮助下,以下是我如何获取自定义表单字段以从模型中获取默认帮助文本:

    class EventForm(forms.ModelForm):
        category = CategoryModelChoiceField(
            queryset=Category.objects.all(),
            help_text=Event._meta.get_field('category').help_text,
    )