Динамическое создание форм из модели - PullRequest
0 голосов
/ 23 января 2019

Я изучаю 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-способ, но я изо всех сил пытаюсь найти другой способ.В основном я хочу автоматически создавать формы в зависимости от того, какие поля есть в модели.

Так что в / отдел / должен быть текстовый ввод для имени и типа.Но на / user / должен быть текстовый ввод для имени и выделения для группы.Все это скорее в одном шаблоне.Если возможно, конечно.

Если это невозможно, каков наилучший способ сделать это?Поскольку создание разных шаблонов для каждой модели кажется неправильным.

РЕДАКТИРОВАТЬ: Теперь мой CreateView работает (все еще очень просто).Теперь я хочу создать ListView похожим образом.Я видел эту проблему, Перебирать имена и значения полей экземпляра модели в шаблоне , но он не смог мне помочь ...

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 }})

...