Django - доступ к полям и именам объектов из представления на основе классов - PullRequest
0 голосов
/ 02 августа 2011

Я пытаюсь написать классное представление для Django, которое будет использовать один и тот же шаблон каждый раз, независимо от модели. Предполагается, что я смогу добавить запись urls.py для каждой модели, и мне не придется беспокоиться о представлении или шаблоне.

Это будет использоваться для отображения формы, и поскольку имена полей формы зависят от типа модели, модель должна быть проверена, а имена полей извлечены на уровне представления, чтобы их можно было передать в общий шаблон. Затем шаблон генерирует форму на основе имен полей и значений объекта.

Я действительно боролся с этим. В данный момент я работаю над переопределением get_context_data следующим образом

def get_context_data(self, **kwargs):
    context = kwargs
    context_object_name = self.get_context_object_name(self.object)
    if context_object_name:
        context[context_object_name] = self.object
    #add some custom stuff on too
    tempdict = [(field, field.value_to_string(self)) for field in self.object._meta.fields]
    #context.update({'datafields' : tempdict})
    context.update({ 'blarg': 'tester!!'})
    return context

Бит self.object._meta.fields - это то, где у меня проблемы. Я просто не могу понять, как получить доступ к текущей модели. Я делаю это в представлении, что мне еще повезет в миксине?

Спасибо за ваше время.

O

Ответы [ 2 ]

0 голосов
/ 02 августа 2011

Я думаю, вы поступаете неправильно.Джанго уже знает, как создать форму из модели, а формы знают, как выводить сами.Таким образом, вы можете создать стандартный общий вид, используя ModelFormMixin, нет необходимости делать что-то умное, чтобы получить поля формы для полей модели.

Единственный сложный момент - это то, что вам нужновид на работу для нескольких моделей.Таким образом, вместо того, чтобы явно объявлять модель в классе представления, вам нужно выработать способ ее динамической передачи - возможно, путем переопределения get_object.

0 голосов
/ 02 августа 2011

Если вы используете django 1.3, в него включены представления на основе классов ... Просто используйте их и задайте для атрибута template_name ваше "общее" имя.

https://docs.djangoproject.com/en/1.3/topics/class-based-views/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...