[Django-forms] Как подклассифицировать общий дизайн CreateView с помощью начальных данных django?


Answers

(Отредактировано, потому что то, что вы пытаетесь, действительно работает)

Вчера я столкнулся с такой же проблемой, но теперь она работает - я думаю, что возвращаю объект вместо dict в get_initial .

Что касается исправления вашей проблемы, я немного подозрительно отношусь к тому, насколько вы, похоже, занимаетесь в post() можете ли вы попробовать его с по умолчанию (без переопределения) post() ?

Вы также можете использовать pdb (или операторы печати), чтобы проверить значение self.get_form_kwargs чтобы убедиться, что initial установлен.

Question

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

class Message(models.Model):

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

Subclassing dvango's CreateView упрощает создание контекста с экземпляром 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 и экземпляр формы имеет правильные исходные данные в post , но когда форма отображается в шаблоне message.html она не захватывает никаких исходных данных, как я ожидал бы. Есть ли специальный трюк, чтобы заставить это работать? Я просмотрел документы (кажется, не хватает примеров на основе представлений классов на основе) и источника, но я не вижу, что мне не хватает.