Django中的TextField配对

时间:2013-12-27 15:16:18

标签: python django web-applications textfield

(我正在编写我的第一个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对的最佳方法是什么?我至少希望收到一些关于这个想法的阅读材料的链接..

谢谢!

1 个答案:

答案 0 :(得分:0)

根据模型的复杂程度,您可能会更好地选择niekas指出的单一模型解决方案。

但是如果你想将数据分成几个模型,你可以看看这个解决方案。

我在Django中不是很熟练,但实现此目的的一种方法是创建一个模型Lecture,其中包含两个一对一字段LectureTitleLectureSummary。通过使用基类,您可以添加一些您希望所有模型都具有的字段。如果您想要为所有模型修改最后一个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给出的解决方案更灵活。

要从LectureSummaryLectureTitle访问讲座,只需使用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