Solved

Adding multiple models for the admin page in Django

Posted on 2015-01-23
9
121 Views
Last Modified: 2015-02-07
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
Comment
Question by:Errang Genevre
  • 5
  • 4
9 Comments
 
LVL 38

Expert Comment

by:Gerwin Jansen, EE MVE
ID: 40569156
>> 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
 

Author Comment

by:Errang Genevre
ID: 40569484
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
 
LVL 38

Expert Comment

by:Gerwin Jansen, EE MVE
ID: 40569666
Are you following a tutorial? Got a link maybe?
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:Errang Genevre
ID: 40569706
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
 
LVL 38

Expert Comment

by:Gerwin Jansen, EE MVE
ID: 40572140
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
 

Author Comment

by:Errang Genevre
ID: 40572518
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
 
LVL 38

Accepted Solution

by:
Gerwin Jansen, EE MVE earned 500 total points
ID: 40574123
I'm not following you I think and my model broke ...
0
 

Author Comment

by:Errang Genevre
ID: 40574389
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
 

Author Comment

by:Errang Genevre
ID: 40575078
I think you included Question and Choice in the same admin page, right? Removing the relationship between Question and Quiz should fix it.
0

Featured Post

How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Since I wrote the original article about Handling Date and Time in PHP and MySQL (http://www.experts-exchange.com/articles/201/Handling-Date-and-Time-in-PHP-and-MySQL.html) several years ago, it seemed like now was a good time to updat…
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will receive an overview of the basics of CSS showing inline styles. In the head tags set up your style tags: (CODE) Reference the nav tag and set your properties.: (CODE) Set the reference for the UL element and styles for it to ensu…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question