2010-05-12 2 views
0

J'ai une question sur les bonnes pratiques de conception de base de données et je voudrais vous tirer parti pour les pointeurs. Le projet a commencé simple.Django Database design - Est-ce un bon stragety pour les défauts par défaut

Hey nous avons un tas de questions que nous veulent avoir des réponses pour chaque projet (pas de problème)

qui se transforma en ...

Hey nous avons tellement de questions peuvent nous les regroupons en sections (yup nous pouvons le faire)

qui conduisent en ..

Peut-on pondérer ces questions et je ne veux pas vraiment certaines de ces questions pour mon projet (Oui, mais nous obtenons difficile)

et puis je pense qu'ils veulent avoir chaque section avoir son propre poids ..

Exigences

Donc il y a les exigences - Pour un nombre n de projet

  • Laisser un membre admin la possibilité de sélectionner les questions pour un projet
  • Laissez le membre admin de peser à nouveau ou utiliser les poids par défaut pour des questions
  • Autoriser le membre administrateur à pondérer les sections
  • Autoriser les membres de l'équipe à répondre aux questions.

Voici donc ce que j'ai imaginé. S'il vous plaît ne hésitez pas à commenter et à fournir de meilleurs exemples

models.py 

from django.db import models 
from django.contrib.sites.models import Site 
from django.conf import settings 

class Section(models.Model): 
    """ 
     This describes the various sections for a checklist: 
    """  
    name = models.CharField(max_length=64) 
    description = models.TextField() 

class Question(models.Model): 
    """ 
     This simply provides a simple way to list out the questions. 
    """  
    question = models.CharField(max_length=255) 
    answer_type = models.CharField(max_length=16) 
    description = models.TextField() 
    section = models.ForeignKey(Section)  

class ProjectQuestion(models.Model): 
    """ 
     These are the questions relevant to the project 
    """ 
    question = models.ForeignKey(Question) 
    answer = models.CharField(max_length=255) 
    required = models.BooleanField(default=True) 
    weight = models.FloatField(default = XXX) 

class Project(models.Model): 
    """ 
     Here is where we want to gather our questions 
    """ 
    questions = models.ManyToManyField(ProjectQuestion) 

Questions immédiates:

  1. Quand je commence un projet - des idées sur la façon de « préremplir » thequestions (et finalement les poids) pour le projet? Ce n'est pas comment charger les questions. Pour cela nous avons json. Je veux de savoir comment "copier" les questions de modèle à le projet?
  2. Existe-t-il une méthode généralement acceptée pour faire ce processus qui me manque? Fondamentalement, l'idée que vous faites référence à les questions sur votre propre poids par défaut , et de stocker la réponse ?
  3. Il semble qu'un bon mandrin du travail sera fait dans les vues et qu'il y aura beaucoup de vérification à y faire? Est-ce que c'est OK?

Encore une fois - n'hésitez pas à me donner de meilleures stratégies !!

Merci

Répondre

-1
  1. Django - Providing Initial Data
  2. Je ne sais pas ce que vous demandez ici
  3. Je dirais qu'il est correct d'avoir cette logique dans la vue en ce qui concerne la façon dont les données sont présentées, pas nécessairement comment il est traité ou validé.
1

C'est ce que je devrais aussi loin que les tables:

table Questions (ce qui inclut le poids par défaut pour la question) table de projet (définit les détails du projet) ProjectQuestions (a projectId et questionid et nouvelle valeur de poids (à l'origine rempli avec le fil par défaut, mais l'administrateur peut le changer.)

Bien sûr, vous pouvez aussi faire quelque chose de similaire avec les sections Vous avez besoin de la table de liaison parce que vous ne voulez pas un changement au poids par défaut pour changer déjà pro et vous voulez que le poids soit modifiable par projet. Quant à savoir comment faire cela en utilisant django, il me bat, car je ne dessinerais jamais une base de données en utilisant un ORM.

+0

D'accord! C'est ma question - comment faites-vous ce lien en utilisant un ORM. !! Super – rh0dium