Django форма CreateView не принимает отправку после установки значения по умолчанию

#python #django

#python #django

Вопрос:

Моя форма django, созданная с использованием CreateView, отказывается отправляться из-за начального значения, которое я предварительно заполнил (и которое является правильным)

Это моя модель :

 class Post(models.Model):
    #some code
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    #some more code
    
  

Это мой взгляд на форму :

 class AddPostView(CreateView):
    model = Post
    form_class = PostForm
    template_name = 'add_post.html'

    def get_initial(self):
        initial = super(AddPostView, self).get_initial()
        #Setting the inital value of author in the form to the username of the logged in user 
        initial['author'] = self.request.user.username
        return initial
  

И это форма, на которую ссылается приведенное выше представление

 class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('x','y', 'author', 'z', 'm')
        widgets = {
            #some code
            'author': forms.TextInput(attrs={'class': 'form-control','readonly':'readonly' }),
            #some more code

        }
  

Теперь, когда я пытаюсь отправить форму, я получаю сообщение об ошибке

 Select a valid choice. That choice is not one of the available choices.
  

Почему это происходит?d

Ответ №1:

Форме нужны идентификаторы для ForeignKey полей, но вместо этого вы указываете имена.

Изменить

 initial['author'] = self.request.user.username
  

Для

 initial['author'] = self.request.user.pk
  

И оставьте виджет как ChoiceField . Тогда это должно сработать.


Или вам нужно изменить проверку формы author поля и выполнить User поиск по имени пользователя вручную; это можно сделать в clean_author() методе формы.