Exception Value: Cannot query "PERGUNTA 2": Must be "Question" instance.

18 views
Skip to first unread message

Elias Coutinho

unread,
Nov 17, 2018, 3:35:12 AM11/17/18
to Django users
Good morning my friends.
Before sending this doubt I searched a lot in the forums of life!

I have the following code that does bulk inclusion:

def seach_create(request):
    template_name
= 'seach_create.html'
    if request.method == 'POST':
        form
= SearchForm(request.POST)
       
if form.is_valid():
            data
= dict(
               
search_key=form.cleaned_data['search_key'],
               
person=form.cleaned_data['person'],
               
researched=form.cleaned_data['researched'],
               
questions=Question.objects.all(),
           
)
           
#criar_pesquisa(**data)
            addQuestions(**data)
           
# Não usar o método save().
            # form.save()
            return redirect('core:seach_create')
   
else:
        form
= SearchForm()
    context
= {'form': form}
   
return render(request, template_name, context)


def addQuestions(**data):
   
#person = Person.objects.get(pk=1)
    questions = Search.objects.all()

   
for question in questions:
       
try:
           
Search.objects.get(
               
search_key=data['search_key'],
               
person=data['person'],
               
researched=data['researched'],
               
question=question
           
)
           
print('existe')
       
except Search.DoesNotExist:
           
for question in questions:
               
Search.objects.get_or_create(
                   
search_key=data['search_key'],
                   
person=data['person'],
                   
researched=data['researched'],
                   
question=question
               
)
           
print('Não existe')

   
return HttpResponseRedirect('/')



The problem is precisely this, if the registry already exists it should ignore or edit the existing data, however I'm getting the error mentioned in this post.

Where can I fix this problem?

Below I will put the models used in this project:

class Person(models.Model):
    cdalterdata
= models.IntegerField('Cód. Alterdata', db_index=True)
    name
= models.CharField('Nome', max_length=100)
   
#email = models.EmailField(null=True, blank=True)
    phone = models.CharField('Telefone', max_length=11, null=True, blank=True)

   
class Meta:
        ordering
= ('name',)
        verbose_name
= 'Pessoa'
        verbose_name_plural = 'Pessoas'

    def __str__(self):
       
return self.name

   
def to_dict_json(self):
       
return {
           
'cdalterdata': self.cdalterdata,
           
'name': self.name,
           
'email': self.email,
           
'phone': self.phone,
           
# 'gender': self.get_gender_display(),
        }

   
# def get_absolute_url(self):
    #     return reverse('pesquisa_alter:add_pesquisa', args=[str(self.id)])


class Client(Person):
    last_search
= models.CharField('Última pesquisa.', max_length=11, null=True, blank=True)
    created_on
= models.DateField(
       
'Criado em.',
       
auto_now_add=True,
       
auto_now=False
    )


   
class Meta:
        ordering
= ('name',)
        verbose_name
= 'Cliente'
        verbose_name_plural = 'Clientes'

    def get_absolute_url(self):
       
return reverse('person_client_detail', args=[str(self.pk)])


class Question(models.Model):
    LEVEL_CHOICES
= (
       
('0', 'Indefinido'),
       
('1', 'Dependencia'),
       
('2', 'Confianca'),
       
('3', 'Comprometimento'),
       
('4', 'Preditiva'),
   
)
    question
= models.CharField('Pergunta', max_length=200)
    level
= models.CharField('Nível', max_length=15,
                             
choices=LEVEL_CHOICES, default='0')

   
class Meta:
        verbose_name
= 'Questão'
        verbose_name_plural = 'Questões'
        ordering = ('-level',)

   
def __str__(self):
       
return self.question


class SearchManager(models.Manager):

   
def add_question(self, search_key, person, researched, question):
        search
, created = self.get_or_create(
           
search_key=search_key, person=person, researched=researched, question=question)
       
if not created:
            search
.search_key = search.search_key
            search
.person = search.person
            search
.question = search.question
            search
.researched = search.researched
            search
.save()
       
return search


class Search(models.Model):
    RESPONSE_CHOICES
= (
       
('V', 'Verdadeiro'),
       
('F', 'Falso'),
       
('I', 'Indefinido'),
   
)
    search_key
= models.CharField(
       
'Chave da pesquisa', max_length=200, db_index=False)
    person
= models.ForeignKey(
       
'core.client', related_name='Cliente', on_delete=models.CASCADE)
    researched
= models.CharField('Entrevistado', max_length=200)
    question
= models.ForeignKey(
       
'core.question', related_name='Pergunta', on_delete=models.CASCADE,)
    response
= models.CharField(
       
'Resposta', max_length=1, choices=RESPONSE_CHOICES, default='I')
    participation_on
= models.DateField(
       
'período da pesquisa',
       
auto_now_add=True,
       
auto_now=False
    )
    created_on
= models.DateTimeField(
       
'solicitado em',
       
auto_now_add=True,
       
auto_now=False
    )

   
#objects = SearchManager()

    class Meta:
        verbose_name
= 'Pesquisa'
        verbose_name_plural = 'Pesquisas'
        unique_together = (('search_key', 'person', 'question'),)
        ordering
= ('-participation_on',)

   
def __str__(self):
       
return self.question.question


Reply all
Reply to author
Forward
0 new messages