Errang Genevre
asked on
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!
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!
ASKER
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?
Are you following a tutorial? Got a link maybe?
ASKER
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.
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.
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?
ASKER
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:
Here is the model for Quiz, this is in a separate app within the project:
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)
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)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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.
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.
ASKER
I think you included Question and Choice in the same admin page, right? Removing the relationship between Question and Quiz should fix it.
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.