Динамическое управление моделью Django - PullRequest
0 голосов
/ 29 января 2012

Я разрабатываю движок для викторин, используя django. В models.py у меня есть такие классы:

class Quiz (models.Model):
    quiz_id = models.AutoField (primary_key=True)
    problem_desc = models.TextField (blank=True)
    problem_has_resource = models.BoolField ()
    problem_is_choice = models.BooleanField ()
    def __unicode__ (self):
        return self.quiz_id

class Choice (models.Model):
    choice_id = models.AutoField (primary_key=True)
    quiz_id = models.ForeignKey (Quiz);
    choice_desc = models.CharField (max_length = 500)
    is_answer = models.BooleanField ()

class Answer (models.Model):
    quiz_id = models.ForeignKey (Quiz)
    input_answer = models.FloatField ()

class Quiz_Resource (models.Model):
    quiz_id = models.ForeignKey (Quiz)
    title = form.CharField (max_length = 50)
    file = forms.FileField ()
    def __unicode__ (self):
        return self.file.name

В викторине может потребоваться ввести «Ответ» или выбрать вариант. Викторина может иметь много вариантов. Викторина может иметь дополнительный ресурс. Я хочу, чтобы boolfield управлял стилем страницы администратора, устанавливал формальную информацию. Как мне этого добиться?

Лук, спасибо!

введите код здесь

1 Ответ

1 голос
/ 29 января 2012

Прежде всего, вы должны связать свою модель викторины с вашими моделями Choice, Answer и Quiz_Ressource.

class Quiz (models.Model):
    name = models.TextField(max_length=50)
    problem_desc = models.TextField (blank=True)
    problem_has_resource = models.BoolField ()
    problem_is_choice = models.BooleanField ()

    choices=models.ManyToManyField(Choice)
    answers=models.ManyToManyField(Answer)
    ressources=models.ManyToManyField(Quiz_Ressource)

Таким образом, вы сообщаете Django, что ваша модель Quiz ссылается на несколько моделей типа Choice, Answer и Quiz_Ressource. Вы можете искать концепцию ManyToMany в реляционных базах данных, если это неясно.

После того, как вы переписали свою модель таким образом, на страницах администратора появятся поля для добавления и выбора вариантов, ответов и ресурсов.

Чтобы продолжить работу с django, используйте документацию, приведенную здесь: https://docs.djangoproject.com/en/1.3/topics/db/models/#many-to-many-relationships

Ваши потребности в пользовательских шаблонах администратора - это отдельная история. Вы можете сделать это с помощью чего-то подобного в своих приложениях admin.py:

from django.contrib import admin
from django.contrib.admin.sites import AdminSite
from yourapp.models import Quiz

class QuizAdminSite(AdminSite):

    def admin_quiz(request):
        #here goes your custom admin view code, where you can do
        #if has_ressource: return render_to_response('admin/quiz/has_ressource.html')
        #elif is_choice: return render_to_response('admin/quiz/is_choice.html')
        #and so on, you have to work out yourself how this has to look exactly
        return HttpResponse('your custom admin view')

    def get_urls(self):
    from django.conf.urls.defaults import *
    urls = super(ItemAdmin, self).get_urls()
    my_urls = patterns('',
        url(
            r'update_feeds',
            self.admin_site.admin_view(self.admin_quiz),
            name='admin_quiz',
        ),
    )
    return my_urls + urls    


class QuizAdmin(QuizAdminSite):
    model=Quiz

admin.site.register(Quiz,QuizAdmin)

Я не знаю точно, что вы хотите сделать с вашим пользовательским видом администратора, поэтому я пропустил эту часть. Но это должен быть путь для подражания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...