从模型动态创建表单

时间:2019-01-23 14:52:12

标签: python django python-3.x django-models django-forms

我现在正在学习Django,但我正在尝试更动态地做一些事情。

基本上我已经定义了多个模型,

class Group(models.Model):
     name = models.CharField(max_length=255)
     type = models.CharField(max_length=255) # Ignore this, is used somewhere else

class User(models.Model):
     name = models.CharField(max_length=255)
     group = models.ForeignKey(Group, verbose_name='group', on_delete=models.CASCADE)

(比这两个模型更多)

我想为这些模型中的每个模型编写不同的视图并不是真正的Django方法,但是我正在努力寻找不同的方法。基本上,我想根据模型具有的字段自动创建表单。

因此,在/ department /上应该有一个用于输入名称和类型的文本输入。 但是,在/ user /上应该有一个用于输入名称的文本输入和一个用于组的选择。 所有这些都放在同一模板中。当然可以。

如果不可能,执行此操作的最佳方法是什么?由于为每个模型创建不同的模板似乎并不正确。

编辑: 现在,我的CreateView正常运行了(仍然非常基础)。现在,我想以类似的方式创建一个ListView。我已经看到了这个问题,Iterate over model instance field names and values in template,但是它无法帮助我...

forms.py

class ModelCreate(CreateView):
    fields = '__all__'
    template_name = 'polls/models/model_create.html'

    def get_form(self, form_class=None):
        try:
            self.model = apps.get_model('polls', self.kwargs['model'])
        except LookupError:
            raise Http404('%s is not a valid model.' % self.kwargs['model'])

        return super(ModelCreate, self).get_form(form_class)

model_create.html

{% extends 'polls/core.html' %}

{% block content %}
<form method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit">
</form>
{% endblock %}

是否可以以类似方式创建ListView?这样我就可以动态获取字段名称和值(像{{ form }}这样的位)

0 个答案:

没有答案