django, python, jquery autocomplete - выберите правильный выбор.Этот выбор не является одним из доступных вариантов - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь сохранить поле "компания", которое является полем автозаполнения.Я использую 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%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...