(我正在编写我的第一个Django应用程序,所以这个问题有点不好意思,对不起)。
我正在为学生创建类似讲座总结工具的东西,我需要制作TextField对--Lecture_title(1)和Lecture_summary(2)。问题是Lecture_title和Lecture_summary可能需要是单独的模型,因为它们将有自己的字段(name,pub_date)+我想让用户只显示Lecture_titles列表或搜索lecture_summaries。用户将能够动态地在我的Web应用程序中添加/删除这些Lecture_titles和Lecture_summaries。每个Lecture_title都是独一无二的,并且将具有'lecture_summary。
问题是 - 在Django中创建TextFied对的最佳方法是什么?我至少希望收到一些关于这个想法的阅读材料的链接..
谢谢!
答案 0 :(得分:0)
根据模型的复杂程度,您可能会更好地选择niekas指出的单一模型解决方案。
但是如果你想将数据分成几个模型,你可以看看这个解决方案。
我在Django中不是很熟练,但实现此目的的一种方法是创建一个模型Lecture
,其中包含两个一对一字段LectureTitle
和LectureSummary
。通过使用基类,您可以添加一些您希望所有模型都具有的字段。如果您想要为所有模型修改最后一个DateTimeField
,这将非常有用。
from django.db import models
class BaseModel(models.Model):
created = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Lecture(BaseModel):
title = models.OneToOneField(LectureTitle)
summary = models.OneToOneField(LectureSummary)
class LectureTitle(BaseModel):
name = models.TextField(max_length=30)
class LectureSummary(BaseModel):
content = models.TextField(max_length=1000)
这可能比niekas给出的解决方案更灵活。
要从LectureSummary
或LectureTitle
访问讲座,只需使用lecture
即可。该字段在一对一字段的另一侧自动创建。
打印所有标题:
for lecture in Lecture.objects.all():
print lecture.title.name
搜索摘要中的内容:
# search_str is the search string from user
for lecture in Lecture.objects.filter(summary.content__contains(search_str):
print lecture.title.name
根据您的评论进行更新: 这应该很简单:
for lecture in Lecture.objects.all():
#lecture.title.name gives you the title of your lecture
#lecture.summary.content gives you the content of the lecture