#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()
методе формы.