SAMA BALA
SAMA BALA

Reputation: 71

'Questions' object has no attribute 'choice_set'

I've been following the Django documentation "Write your app tutorial" and I keep running into the above error. It seems to be coming from this line

selected_choice = question.choice_set.get(pk=request.POST['choice']) 

This is my Questions and Choices object:

class Questions(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date Published')
    def __str__(self):
        return self.question_text

class Choices(models.Model):
    questions = models.ForeignKey(Questions, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

The code is exactly as it is on the official documentation, so I can't tell exactly where the error is coming from

Upvotes: 1

Views: 2543

Answers (3)

Ricardo Colares
Ricardo Colares

Reputation: 21

Your Class name is Choices, so if you try choices_set things might work

Upvotes: 0

Atcrank
Atcrank

Reputation: 479

"choice_set" is created as an object in Questions because the Choice model has a foreignKey relationship to Questions, so for every entry in Questions, there might be some Choice instances (rows of data in the Choice table). The general rule is a lowercase version of the model name, followed by "_set".

Your model is called Choices plural (with an 's'), so the set will probably be called "choices_set". I'm pretty sure that's the remaining problem for you.

Upvotes: 3

Lie Ryan
Lie Ryan

Reputation: 64915

You need to define the Choice model with a foreign key to Questions, otherwise django won't create choice_set.

Upvotes: 0

Related Questions