• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 130
  • Last Modified:

Adding multiple models for the admin page in Django

Hello,

I'm trying to learn Django by building a quiz application.

This is what I have:
 - Table for Question
 - Table for Choices
 - Table for Quiz

I can link the Choices model with the Question model in the Admin page.

But when I try to link the Question model with the Quiz model in the Admin page, I can only add questions; but I cannot add choices. When I try to add the Choices model to the Quiz model without having a ForeignKey relationship between the Quiz and Choices table... but that makes no sense.

Is there any way I can associate the questions and choices in the Quiz page without having the relationship between Quiz and Choices?

Appreciate any help!
0
Errang Genevre
Asked:
Errang Genevre
  • 5
  • 4
1 Solution
 
Gerwin Jansen, EE MVETopic Advisor Commented:
>> Is there any way I can associate the questions and choices in the Quiz page without having the relationship between Quiz and Choices?

I don't think so, a quiz is made up out of x questions that each have y choices. So to create quiz #1 and then quiz #2 etc. you need to have a relation between quiz and questions (which quiz contains which questions).

For the questions, you need a relation to answers and they need to referred to a a foreign key because you don't want answers for question #1 to be linked to question #2. You can create different quiz's that are made up of a selection of questions. But answers always belong to a certain question.
0
 
Errang GenevreAuthor Commented:
So, I would need to have a relationship between Quiz, and Choices (answers) if I want to interact with Choices from the Quiz admin page?
0
 
Gerwin Jansen, EE MVETopic Advisor Commented:
Are you following a tutorial? Got a link maybe?
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
Errang GenevreAuthor Commented:
I'm just following https://docs.djangoproject.com/en/1.7/intro/tutorial01/

I'm fairly new to Django; I tried a few combinations to get this working; basically variations of these two:
- adding the Choices table under QuizAdmin
- adding the choices under QuestionAdmin and adding QuestionAdmin to QuizAdmin

I tried searching Google, but I think I confused the poor thing by not phrasing the question properly; or the out of box Django stuff doesn't support this, and I need to write custom code for this.

I'd really appreciate an answer confirming either scenario, so I can focus on what's possible.
0
 
Gerwin Jansen, EE MVETopic Advisor Commented:
I see, can you post your model? I just followed that tutorial, works fine so far. You have Quiz, the tutorial is about Poll, what did you change?
0
 
Errang GenevreAuthor Commented:
Basically what I changed was that I wanted to have different groupings of Polls; that's it. I made minimal changes to Question and Choice; so they are more applicable for a quiz application, but that's it.

Here are the models for Question and Choices:
from quiz_admin.models import Quiz

class Question(models.Model):
    def __str__(self):
        return self.question_text

    quiz = models.ForeignKey(Quiz)
    question_text = models.CharField(max_length=500)

class Choice(models.Model):
    def __str__(self):
        return self.choice_text

    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    answer = models.BooleanField(default=False)

Open in new window


Here is the model for Quiz, this is in a separate app within the project:
class Quiz(models.Model):
    class Meta:
        verbose_name_plural = "quizzes"
    def __str__(self):
        return self.category_text

    groups = models.ManyToManyField(Group, related_name='group')
    category_text = models.CharField(max_length=200, unique=True )
    category_description = models.CharField(max_length=1000, default="")
    #url = models.URLField()
    course_code = models.CharField(max_length=40, default="CD"+datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))
    due_date = models.DateField(default=datetime.date.today)
    duration_hours = models.DecimalField(max_digits=5, decimal_places=2, default=0.0)
    required_score = models.DecimalField(max_digits=3, decimal_places=0, default=100)

Open in new window

0
 
Gerwin Jansen, EE MVETopic Advisor Commented:
I'm not following you I think and my model broke ...
0
 
Errang GenevreAuthor Commented:
Heh, that's the problem...

Unless you have a foreign key relationship between Choice and Quiz; Django doesn't seem to want to link up the two tables together.

I'm trying to figure out a way to have the admin page auto generate the elements needed to perform CRUD operations, without having to have a foreign key between Choice and Quiz.
0
 
Errang GenevreAuthor Commented:
I think you included Question and Choice in the same admin page, right? Removing the relationship between Question and Quiz should fix it.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now