Я создаю приложение Quiz, где пользователь (создатель контента или автор) может создавать викторины (вопросы на основе выбора и их решения) из определенного домена. Эти опросы могут быть предприняты другими пользователями (потребители - еще не реализованы).Система тегов для Django
Чтобы пользователи, отвечающие за вопросы, могли искать вопросы на основе конкретных доменов, представляющих интерес (и добавлять детализацию к содержимому викторины), я внедряю систему тегов, привязанную к вопросам.
Вот мои модели:
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 мечения Toxi. Проблема в том, что денормализованная система поможет ускорить выбор, а 3NF будет быстрее вставлять, но медленный поиск.
Я смущен, если мне нужно использовать тип поля ManyToMany для тегов. Может ли кто-нибудь просветить, было бы лучше использовать поле ManyToMany, встроенное в Django, или реализовать систему 3NF как выполненную?
Я хочу иметь дескриптор на тегах, а метод, который я реализовал, дает мне этот дескриптор - I предположим, это то, что вы подразумеваете под «явным доступом» (извините, мои языковые навыки очень плохие). Большое спасибо за проверку моделей. Это мой первый проект в Django такого рода, и я делаю много таких ошибок. Я сделаю соответствующие изменения, чтобы отразить эти предложения. Благодарю. – solyarist