Database Django数据库设计——这是覆盖默认值的好策略吗

Database Django数据库设计——这是覆盖默认值的好策略吗,database,django,data-structures,django-models,Database,Django,Data Structures,Django Models,我有一个关于良好的数据库设计实践的问题,我想利用你们来提供一些建议。这个项目一开始很简单 嘿,我们每个项目都有一大堆问题需要回答(没问题) 变成了 嘿,我们有这么多问题,我们能把它们分成几个部分吗(是的,我们能做到) 这导致了 我们能权衡一下这些问题吗?我真的不想在我的项目中遇到这些问题(是的,但我们越来越难了) 然后我想他们会希望每个部分都有自己的重量 要求 models.py from django.db import models from django.contrib.sites.mo

我有一个关于良好的数据库设计实践的问题,我想利用你们来提供一些建议。这个项目一开始很简单

嘿,我们每个项目都有一大堆问题需要回答(没问题)

变成了

嘿,我们有这么多问题,我们能把它们分成几个部分吗(是的,我们能做到)

这导致了

我们能权衡一下这些问题吗?我真的不想在我的项目中遇到这些问题(是的,但我们越来越难了)

然后我想他们会希望每个部分都有自己的重量

要求

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)
这就是对n个项目的要求

  • 允许管理员成员为项目选择问题
  • 允许管理员成员重新称重或使用问题的默认权重
  • 允许管理员成员重新调整节的权重
  • 允许团队成员回答问题
这就是我想到的请随时发表评论并提供更好的示例

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)
即时问题:

  • 当我开始一个项目时-有什么想法吗 关于如何“预填充” 这些问题(以及最终的 项目的权重?这不是怎么做的 加载问题。为此,我们有json。我想要 了解如何将模板问题“复制”到 项目
  • 有没有 普遍接受的做法 我错过的这个过程? 基本上就是你提到的想法 这些问题超出了你自己的范围 默认权重,并存储 回答
  • 看来一个好的卡盘 其中一部分工作将在 视图,这需要进行大量检查 需要在那里发生吗?是吗 好吗
  • 再次-请随意给我更好的策略

    谢谢

  • 不知道你在问什么
  • 我想说的是,视图中有这样的逻辑是可以的,因为它涉及到数据是如何呈现的,而不一定是如何处理或验证的

  • 就表格而言,这是我想要的:

    问题表(这将包括问题的默认权重) 项目表(定义项目的详细信息) ProjectQuestions(具有projectid和questionid以及新的权重值(最初使用默认的Wiright填充,但管理员可以更改。)

    当然,你也可以对这些部分做一些类似的事情。 您需要链接表,因为您不希望更改默认权重来更改已完成的项目,因为您希望权重可以按项目更改


    至于如何使用django做到这一点,这比我强,因为我永远不会使用ORM设计数据库。

    同意!!这是我的问题-如何使用ORM进行链接。!!超级