扩展的 CreateView 没有在模板中提供所需的输出

Posted

技术标签:

【中文标题】扩展的 CreateView 没有在模板中提供所需的输出【英文标题】:Extended CreateView does not give the desired output in the template 【发布时间】:2013-06-06 00:02:40 【问题描述】:

我的 model.py 中有两个表:

class Partner(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, blank=True)
    class Meta:
        db_table = 'partner'

class Device(models.Model):
    id = models.AutoField(primary_key=True)
    partner = models.ForeignKey('Partner', null=True, blank=True)
    username = models.CharField(max_length=255, blank=True)
    password = models.CharField(max_length=255, blank=True)
    class Meta:
        db_table = 'device'

我为通用表单生成创建了一个视图:

class CreateDeviceView(CreateView):
    model = Device
    template_name = 'device_form.html'
    #form_class = DeviceForm

    def get_success_url(self):
        return reverse('partners')

我从 urls.py 调用:

 url(r'^device/new', CreateDeviceView.as_view(), name='device-new'),

模板device_form.html是:

<form action=" action " method="POST">
        % csrf_token %
        <ul>
             form.as_p 
        </ul>
        <input type="submit" class="btn btn-info" value="Save"/>
    </form>

生成的创建表单在选择菜单中有值(对于外键):Partner Object,Partner Object... 如何将选择菜单中的值设为 Partner.name? 我尝试构建自己的表单,但没有得到所需的输出。

【问题讨论】:

【参考方案1】:

在您的 Partner 模型中,添加 __unicode__ 方法:

class Partner(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, blank=True)

    def __unicode__(self):
        return unicode(self.name)

    class Meta:
        db_table = 'partner'

【讨论】:

谢谢,这就是解决方案。

以上是关于扩展的 CreateView 没有在模板中提供所需的输出的主要内容,如果未能解决你的问题,请参考以下文章

如何将引导类添加到模板中的 Django CreateView 表单字段?

Django:如何在新模板中的另一个模型上使用 CreateView 的 form_valid() 返回的响应?

使用占位符和错误验证为 CreateView 和 UpdateView 制作自定义模板

Django - 如何使用CreateView扩展自定义用户

使用 get_queryset 在 CreateView 中过滤模型

在 Django 中,如何在提交 CreateView 时重定向到 UpdateView?