EditorTemplates / Object. cshtml с использованием EditorFor () вместо Editor ()?

Я пытаюсь создать общий шаблон редактора, который копирует Html.EditorForModel () , чтобы позже настроить и использовать . Шаблон Брэда Уилсона довольно близок, но я обнаружил, что он подавляется, когда один и тот же ключ существует как во ViewData (или ViewBag), так и в модели. Например, ViewBag.Title вызывает проблемы, если модель представления также имеет свойство Title .

Я узнал здесь , что с помощью помощников строгого типа (например, Html.EditorFor (x => x.Title) вместо Html.Editor ("

Я пытаюсь создать диалоговое окно, в котором используется функция jquery .load () для прихлебки в отображаемой форме django. Функция .load передается pk объекта "alert". В функциях класса также доступны такие вещи, как self.request.user , поэтому я могу предварительно заполнить эти поля, показанные ниже в модели сообщения (models.py):

class Message(models.Model):

    user = models.ForeignKey(User)
    alert = models.ForeignKey(Alert)
    date = models.DateTimeField()
    message = models.TextField()

Создание подкласса CreateView от django делает его довольно привлекательным. легко создать контекст с помощью экземпляра ModelForm (views.py):

class MessageDialogView(CreateView):
    """ show html form fragment """
    model = Message
    template_name = "message.html"

    def get_initial(self):
        super(MessageDialogView, self).get_initial()
        alert = Alert.objects.get(pk=self.request.POST.get("alert_id"))
        user = self.request.user
        self.initial = {"alert":alert.id, "user":user.id, "message":"test"}
        return self.initial


    def post(self, request, *args, **kwargs):
        super(MessageDialogView, self).post(request, *args, **kwargs)
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        context = self.get_context_data(form=form)
        return self.render_to_response(context)

Проблема в том, что self.initial не отображается с формой. Я застрахован, что форма действительно вызывает get_initial , а экземпляр формы имеет правильные начальные данные в сообщении , но когда форма отображается в шаблоне message.html это не так t захватить любые исходные данные, как я ожидал. Есть ли особый трюк, чтобы заставить это работать? Я просмотрел документы (похоже, не хватает примеров для общих представлений классов) и исходный код, но я не вижу, что мне не хватает.

19
задан Xaerxess 27 May 2011 в 10:04
поделиться