Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 2, 2013 00:42:25

reply
Зарегистрирован: 2013-02-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с mptt!

Пишу тест для студентов колледжа, решил что в django будет удобней. Назрел такой вопрос: Как использовать mptt в административном интерфейсе?
модель должна выглядеть след. образом:
-преподаватель
–ученик
—тест
—-вопрос теста

Офлайн

#2 Фев. 3, 2013 12:29:00

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

помогите с mptt!

Что такое “mptt”?

Офлайн

#3 Фев. 3, 2013 12:49:11

reply
Зарегистрирован: 2013-02-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с mptt!

В Debian это пакет python-django-mptt
Django MPTT is a reusable/standalone Django application which aims to make it easy for you to use Modified Preorder Tree Traversal with your own Django models in your own applications.

или проще говоря позволяет в модели использовать древовидную структуру (иерархия в БД)

Офлайн

#4 Фев. 8, 2013 04:09:32

Fibio
От:
Зарегистрирован: 2010-09-14
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

помогите с mptt!

установите FeinCMS: http://feincms-django-cms.readthedocs.org/en/v1.6.0/
затем заюзайте mptt.admin.FeinCMSModelAdmin базовой админ модели для вашей mptt модели:

from mptt.admin import FeinCMSModelAdmin
admin.site.register(Category, FeinCMSModelAdmin)



Офлайн

#5 Фев. 8, 2013 09:13:51

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

помогите с mptt!

Вот статья на тему отображения деревьев в админке. Нужно только часть FeinCMS установить. Ссылка.

Офлайн

#6 Фев. 8, 2013 19:30:55

reply
Зарегистрирован: 2013-02-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с mptt!

Спасибо вам за материал. Вариант, предложенный newca9h я раньше уже видел, сейчас даже сделал все как написано), возникла следующая проблема:
При добавлении связи по ключу (по parent), в интерфейсе куда-то пропадают записи причем все, что можно придумать на этот счет?
В admin.py

class CategoryAdmin(editor.TreeEditor):
    list_display = ('title',)
admin.site.register(Answers, CategoryAdmin)

в models.py
class Answers(models.Model):
    title = models.CharField('ответ', max_length=255)
    TrueAnswer    =               models.BooleanField(verbose_name='правильность ответа да/нет')
    Answer           =               models.CharField(max_length=100, verbose_name='возможный ответ')
    parent            =               models.ForeignKey('SomeQuestion', blank=True, null=True, 
                                                              verbose_name="вопрос", related_name='возможный_ответ')
    title                =               models.CharField('Название', max_length=255)

Офлайн

#7 Фев. 8, 2013 19:50:19

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

помогите с mptt!

related_name='возможный_ответ' ?????? почему на-русском то?
Два поля title ??
Ну и называть поля модели с большой буквы некошерно вроде бы.
Вы модели для начала приведите в порядок, потом может кто подскажет по проблеме…

Офлайн

#8 Фев. 9, 2013 12:27:41

reply
Зарегистрирован: 2013-02-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с mptt!

БД я создал с UTF-8: “CREATE DATABASE tester CHARSET=UTF8;” отображается все корректно, имхо ошибок быть не должно.
Вот как выглядит весь model.py

# -*- coding: utf-8 -*-
from django.db import models 
class Answers(models.Model):
    title                    =               models.CharField('ответ', max_length=255)
    trueAnswer         =               models.BooleanField(verbose_name='правильность ответа да/нет')
    answer               =               models.CharField(max_length=100, verbose_name='возможный ответ')
    parent                =               models.ForeignKey('SomeQuestion', blank=True, null=True, 
                                                              verbose_name="вопрос", related_name='возможный_ответ')
    title                    =               models.CharField('Название', max_length=255)
    
    def __unicode__(self):
        return self.answer
class SomeQuestion(models.Model):
    question            =               models.CharField(max_length=100, verbose_name='вопрос')
    parent               =               models.ForeignKey('SomeTest', blank=True, null=True, 
                                                              verbose_name="тест", related_name='вопрос')
    title                   =               models.CharField('Название', max_length=255)
    
    def __unicode__(self):
        return self.question
        
class SomeTest(models.Model):
    testName              =               models.CharField(max_length=30, verbose_name='имя теста')
    quantityQuestion   =               models.CharField(max_length=30, verbose_name='кол-во вопросов')
    parent                  =               models.ForeignKey('SomeStudent', blank=True, null=True, 
                                                              verbose_name="студент", related_name='тест')
    title                      =               models.CharField('Название', max_length=255)
    
    def __unicode__(self):
        return self.testName
class SomeStudent(models.Model):    
    firstName                  =               models.CharField(max_length=30, verbose_name='имя')
    secondName              =               models.CharField(max_length=30, verbose_name='фамилия')
    group                        =               models.CharField(max_length=30, verbose_name='группа')
    user                         =               models.CharField(max_length=30, verbose_name='пользователь')
    password                  =               models.CharField(max_length=30, verbose_name='пароль') 
    rating                       =               models.CharField(max_length=30, verbose_name='оценка')
    parent                      =               models.ForeignKey('SomeTeacher', blank=True, null=True, 
                                                              verbose_name="преподаватель", related_name='студент')
    title                          =               models.CharField('Название', max_length=255)
    
    def __unicode__(self):
        return self.firstName
        
class SomeTeacher(models.Model):
    firstName                   =               models.CharField(max_length=30, verbose_name='имя')
    secondName              =               models.CharField(max_length=30, verbose_name='фамилия')
    email                         =               models.EmailField(blank=True, verbose_name='e-mail')
    user                          =               models.CharField(max_length=30, verbose_name='пользователь')
    password                   =               models.CharField(max_length=30, verbose_name='пароль')     
    title                           =               models.CharField('Название', max_length=255)  
    parent                       =               models.ForeignKey('self', blank=True, null=True, 
                                                              verbose_name="преподаватель",     related_name='преподаватель')    
    def __unicode__(self):
        return self.firstName
mptt.register(Answers,)
mptt.register(SomeQuestion,)
mptt.register(SomeTest,)
mptt.register(SomeStudent,)
mptt.register(SomeTeacher,)

в admin.py
# -*- coding: utf-8 -*-
from django.contrib import admin
from feincms.admin import editor
from student.models import SomeTest, SomeStudent, SomeQuestion, Answers, SomeTeacher
class CategoryAdmin(editor.TreeEditor):
    list_display = ('title',)
admin.site.register(Answers, CategoryAdmin)
admin.site.register(SomeQuestion, CategoryAdmin)
admin.site.register(SomeTest, CategoryAdmin)
admin.site.register(SomeStudent, CategoryAdmin)
admin.site.register(SomeTeacher, CategoryAdmin)
Спасибо nnmware за критику, так лучше?
P.S. Записи начинают исчезать при добавлении к parent 2-го child…

Отредактировано reply (Фев. 9, 2013 13:06:19)

Офлайн

#9 Фев. 9, 2013 13:15:47

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

помогите с mptt!

Я вообще не вижу причин в вашем случае использовать related_name, так как у вас классы не наследуют друг друга и в одном классе два поля не ссылаются на один и тот же объект. Или я ошибаюсь? Во-вторых, зачем вам столько mptt структур. Вроде, изначально вкладываться должны были только вопросы теста? И еще, у вас что-ли вопрос в вопрос будет вкладываться? Просто если это отношения parent-child, то лучше использовать родной ForeignKey. Но это, то что я понял из ваших сообщений и беглом чтении вашего кода. Может вам лучше подумать над структурой ваших моделей? Ведь лишний функционал тоже зло.

Отредактировано newca9h (Фев. 9, 2013 13:18:04)

Офлайн

#10 Фев. 17, 2013 14:24:12

reply
Зарегистрирован: 2013-02-02
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с mptt!

Благодарю newca9h за совет. Что-то я действительно увлекся и не туда полез. Согласен что лучше использовать “родной ForeignKey”.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version