【问题标题】:How to call model verbose_name in class based view如何在基于类的视图中调用模型 verbose_name
【发布时间】:2020-01-04 11:27:23
【问题描述】:

我有一个基于 UpdateView 类的视图:

class CompanyUpdate(UpdateView):
    model = Company
    template_name = 'companies/company_update.html'
    fields = '__all__'

    def form_valid(self, form):
        self.object = form.save()
        title = str(self.object)
        messages.info(self.request, 'Company ' + title + ' updated')
        return super().form_valid(form)

我的模型有一个 Meta verbose_name 定义:

class Company(models.Model):
    company_name = models.CharField(max_length=255)

    class Meta:
        verbose_name = 'Company'
        verbose_name_plural = 'Companies'

有没有办法在form_valid函数中显示模型的verbose_name所以我就不写了

messages.info(self.request, 'Company ' + title + ' updated' )

而是类似:

messages.info(self.request, self.request.META['verbose_name'] + title + ' updated' )

?

【问题讨论】:

标签: django django-models django-views


【解决方案1】:

您可以通过调用._meta访问该类的Options对象并获取该模型的.verbose_name

def form_valid(form):
    messages.info(self.request, form.instance._meta.verbose_name + ' updated.')
    return super().form_valid(form)

所以在这种特定情况下,您可以通过以下方式实现:

class CompanyUpdate(UpdateView):
    model = Company
    template_name = 'companies/company_update.html'
    fields = '__all__'

    def form_valid(self, form):
        self.object = form.save()
        messages.info(self.request, '{} {} updated.'.format(
            self.object._meta.verbose_name,
            str(self.object)
        ))
        return super().form_valid(form)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 2013-01-10
    • 2017-08-13
    • 2020-08-09
    • 2011-08-02
    相关资源
    最近更新 更多