Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django标签系统_Django_Django Models_Tags_Tagging_3nf - Fatal编程技术网

Django标签系统

Django标签系统,django,django-models,tags,tagging,3nf,Django,Django Models,Tags,Tagging,3nf,我正在构建一个测验应用程序,用户(内容创建者或作者)可以从特定领域创建测验(基于选择的问题及其解决方案)。其他用户(消费者-尚未实现)可以尝试这些测试 为了让测验消费者能够根据他们感兴趣的特定领域搜索问题(并为测验内容添加粒度),我正在实现一个附加到问题的标记系统 以下是我的模型: class question(models.Model): ques_id = models.AutoField(primary_key=True) ques_text = models.T

我正在构建一个测验应用程序,用户(内容创建者或作者)可以从特定领域创建测验(基于选择的问题及其解决方案)。其他用户(消费者-尚未实现)可以尝试这些测试

为了让测验消费者能够根据他们感兴趣的特定领域搜索问题(并为测验内容添加粒度),我正在实现一个附加到问题的标记系统

以下是我的模型:

class question(models.Model):   

    ques_id = models.AutoField(primary_key=True) 
    ques_text = models.TextField(max_length=1024, blank=False)
    ques_author = models.ForeignKey('author')
    ques_created = models.DateField(auto_now_add=True)
    ques_dscore = models.IntegerField()
    ques_bloom = models.CharField(max_length=3)
    ques_subject = models.CharField(max_length=3)
    ques_type = models.CharField(max_length=1)
    ques_flags = models.CharField(max_length=16)
    ques_quiz = models.ManyToManyField('quiz')

    def __unicode__(self):
        return self.ques_text

class choice(models.Model):

    choice_id = models.AutoField(primary_key=True)
    choice_text = models.CharField(max_length=256, blank=False)
    choice_ques = models.ForeignKey('question')
    choice_ans = models.BooleanField(default=False)
    choice_tags = models.CharField(max_length=32)

    def __unicode__(self):
        return self.choice_text

class answer(models.Model):

    answer_id = models.AutoField(primary_key=True)
    answer_text = models.TextField(max_length=1024)
    answer_ques = models.ForeignKey('question')
    answer_choice = models.ForeignKey('choice')
    answer_tags = models.CharField(max_length=128)

class author(models.Model):

    user = models.OneToOneField(User)
    domain = models.CharField(max_length=16)

    def __unicode__(self):
        return self.user.username


# a table for storing all the tags
class tags(models.Model):

    tags_id = models.AutoField(primary_key=True)
    tags_text = models.CharField(max_length=16)

    def __unicode__(self):
        return self.tags_text

# table that connects tags with question attached to the tag
# from all the research on the web, it can be infered that
# 3NF tagging (Toxi Solution) is the best way to go
# good for inserts but slow on selects
class tagcon(models.Model):

    tagcon_id = models.AutoField(primary_key=True)
    tagcon_tags = models.ForeignKey('tags')
    tagcon_ques = models.ForeignKey('question')
我目前已经应用了3NF标记毒物解决方案。问题是,非规范化系统将有助于更快的选择,而3NF将是更快的插入,但搜索速度较慢


我不知道是否应该为标记使用多个字段类型。有人能告诉我,使用Django内置的多个字段还是按原样实现3NF系统更好吗?

在我看来,我建议您尝试这两个项目 .
在我看来,我建议你试试这两个项目 . .

这已经和许多领域完全一样了。唯一的区别是,添加字段将为您提供从问题到标记的显式访问器

(注意,您的模型非常奇怪。在每个字段名称前面加上模型名称的缩写版本绝对没有好处;您只能通过模型访问该字段,因此您将始终执行
question.ques_text
,这是多余的。并且,除非您有自己的PK字段,否则您不应该定义自己的PK字段。)(很好的理由。)

这已经与ManyToManyField完全相同。唯一的区别是添加该字段将为您提供从问题到标记的显式访问器


(注意,您的模型非常奇怪。在每个字段名称前面加上模型名称的缩写版本绝对没有好处;您只能通过模型访问该字段,因此您将始终执行
question.ques_text
,这是多余的。并且,除非您有自己的PK字段,否则您不应该定义自己的PK字段。)(很好的理由。)

我想在标记上有一个句柄,我实现的方法给了我这个句柄——我想这就是你所说的“显式访问器”(对不起,我的语言技能很差)。非常感谢您检查模型。这是我在Django的第一个此类项目,我犯了很多这样的错误。我将做出适当的更改以反映这些建议。谢谢。我想对标记有一个句柄,我实现的方法给了我这个句柄-我想这就是您所说的“显式访问器”的意思(很抱歉,我的语言能力非常差)。非常感谢您查看模型。这是我在Django的第一个此类项目,我犯了很多这样的错误。我将做出适当的更改以反映这些建议。谢谢。