Я пытаюсь сохранить поле "компания", которое является полем автозаполнения.Я использую ajax jquery, но при попытке сохранить форму я получаю сообщение об ошибке: «Выберите правильный вариант. Этот вариант не является одним из доступных».,Я могу сохранить его, только если введу идентификатор компании (т. Е. 1, 2) вместо имени «Джек в коробке».Любая идея, почему это происходит?
ОБНОВЛЕНИЕ: В моем views.py -> QuestionCreate Class -> Post метод, "form.is_valid ()" не удается.Я думаю, что моя ошибка где-то в методе Post, и я неправильно передаю название компании ???ПОЖАЛУЙСТА, ПОМОГИТЕ!
Models.py
class Question(models.Model):
question_text = models.CharField(max_length=200,
validators=[validate_badwords])
pub_date = models.DateTimeField('date published')
company = models.ForeignKey(Company,
on_delete=models.CASCADE,
null=True,
default=None)
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200,
validators=[validate_badwords])
votes = models.IntegerField(default=0)
class Company(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(default=None, null=True)
B2B = "B2B"
B2A = "B2A"
B2C = "B2C"
BUSINESS_CHOICES = ((B2B, "B2B"), (B2A, "B2A"), (B2C, "B2C"))
business = models.CharField(max_length=3,
choices=BUSINESS_CHOICES,
default=B2A)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
View.py
class QuestionCreate(CreateView):
template_name = 'polls/question_form.html'
model = Question
form_class = QuestionForm
success_url = reverse_lazy('polls:index')
def get(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
choice_form = ChoiceInlineFormSet()
return self.render_to_response(
self.get_context_data(form=form, choice_form=choice_form))
def post(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
choice_form = ChoiceInlineFormSet(self.request.POST)
if (form.is_valid() and choice_form.is_valid()):
return self.form_valid(form, choice_form)
else:
return self.form_invalid(form, choice_form)
def form_valid(self, form, choice_form):
self.object = form.save(commit=False)
self.object.pub_date = timezone.now()
self.object.save()
choice_form.instance = self.object
choice_form.save()
return HttpResponseRedirect(self.success_url)
def form_invalid(self, form, choice_form):
return self.render_to_response(self.get_context_data(form=form,
choice_form=choice_form))
forms.py
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
fields = ['company', 'question_text']
labels = {
'company': ('Company'),
'question_text': ('Question'),
}
widgets = {
'question_text': forms.TextInput(attrs={'placeholder': 'Enter Question'}),
'company': forms.TextInput(attrs={'id': 'companiesList'}),
}
ChoiceInlineFormSet = inlineformset_factory(Question,
Choice,
fields=['question', 'choice_text'],
exclude=[], can_delete=False)
html / js file
{% block body %}
<div class= "container-fluid">
<h1>Polls</h1>
<form method= "post">
<div class="form-group">
<label for="enteringquestion">Please enter a Company and Question: </label>
{% csrf_token%}
{{ form.as_p}}
<fieldset>
<label for="enteringchoices">Enter Choices: </label>
<br>
{{ choice_form.management_form }}
{{ choice_form.non_form_errors }}
{% for form in choice_form %}
{{ form }}
{% endfor %}
</fieldset>
</div>
<button type="submit" class="btn btn-primary" >Add your choices</button>
</form>
{% if error_message %}
<h2> {{ error_message }} </h2>
{% endif %}
<script type="text/javascript">
$( function() {
$( "#companiesList" ).autocomplete({
source: "{% url 'polls:company_autocomplete' %}",
});
});
</script>
</div>
{%endblock%}