如何使用Django UpdateView填充现有的html表单?

时间:2019-01-11 20:20:26

标签: django python-3.x

我正在尝试实现一个简单的UpdateView,但是我想使用自己的模板。使用djangos auto_population是有效的,但不是我想要的,因为我有很多格式不同的字段。

<form method="post" action="#">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit">
</form>

但是我想使用自己的表单模板,如下所示:

edit_template.html

<form class="form-horizontal" role="form" method="POST" action="{%   url 'update' pk=abc %}">
    {% csrf_token %}
<input name='varX' id="varX" type="text" placeholder="" class="form-class">

<input name='varY' id="varY" type="text" placeholder="" class="form-class">
</form>

views.py

class ModelUpdate(UpdateView):
    model = MyModel
    fields = ['varX','varY']

现在,我希望用我的对象数据填充该表单,但是该表单为空。

UpdateView还将数据两次传递给模板:一个作为“对象”,另一个作为“ mymodel”。

我也尝试过更新

get_context_data

通过添加

context.update( model_to_dict(myModelData))

但这也不会改变任何东西。

如何使用基于djangos类的视图填充自定义表单?

2 个答案:

答案 0 :(得分:0)

看看django-widget-tweaks,您首先需要检查任何非字段错误,然后逐个循环检查字段。

https://simpleisbetterthancomplex.com/article/2017/08/19/how-to-render-django-form-manually.html

本文应该仅涉及

答案 1 :(得分:0)

尝试一下:

function src($object,$slug,$thumb_size = null) {
$table = $object->getTable();
$width =  ($thumb_size)?explode('/',$thumb_size)[0]:false;
$height = ($thumb_size)?explode('/',$thumb_size)[1]:false;

if($attachment = $object->attachments($slug)->first()) {
    if($width && $height) {
        $src = url("/uploads/".$table."/thumb_{$width}-{$height}_".$attachment->file);
    } else {
        $src = url("/uploads/".$table."/".$attachment->file);
    }
} else {
    if($width && $height) {
        if(file_exists("uploads/defaults/thumb_{$width}-{$height}_default.png")) {
            $src = url('')."/uploads/defaults/thumb_{$width}-{$height}_default.png";
        } else {
            Image::make("default.png")->fit($width,$height)->save("uploads/defaults/thumb_{$width}-{$height}_default.png");
            $src = url('')."/uploads/defaults/thumb_{$width}-{$height}_default.png";
        }
    } else {
        $src = url('')."/default.png";
    }
}

return $src;