Что не так с этой простой функцией просмотра?

#django #django-views

#джанго #django-просмотры

Вопрос:

В models.py сохранение файлов:

 class Story(models.Model):
    title = models.CharField(max_length=255)
    text = models.TextField()
    author = models.ForeignKey(User)
  

В forms.py файл содержит:

 class StoryForm(forms.Form):
    class Meta:
        model = Story
  

В views.py файл содержит:

 def story(request):
    if request.method == 'POST':
        story_form = StoryForm(request.POST)
        if story_form.is_valid():
            story_form.cleaned_data['author'] = request.user.id
  

Проблема здесь должна заключаться в одном из этих 4 вариантов:

  1. Story.author должен быть экземпляром «User», потому что объекты в Form.cleaned_data dict преобразуются в объекты python методом to_python()

  2. Форма.cleaned_data еще не определена

  3. Form.cleaned_data должны быть заполнены только методами Form.clean() или Form.clean_<field_name>()

  4. Все в порядке

Мое лучшее предположение было 3, потому что я думал, что 2 недопустимо, потому что cleaned_data — это предопределенная функция, и я не мог по-настоящему понять значение 1. Какая из 4-х является реальной проблемой?

Комментарии:

1. Зачем вам изменять cleaned_data после вызова .is_valid() ?

2. @Alex Код на самом деле не мой, я просто пытаюсь выяснить, что с ним не так.

3. Номер 3, в данном случае 🙂

4. @Alex Почему это?

5. Потому что, если вы хотите передать автора для этой формы модели, вы либо переопределяете форму __init__ и передаете ее вместе request.POST , либо передаете ее непосредственно request.POST через скрытое поле формы, которое хранит request.user.id . Слишком много неизвестных относительно желаемого потока, чтобы указывать на конкретное решение.