如何在调用其父级时从模型访问字段

时间:2015-01-23 10:51:05

标签: python django django-views django-templates

我正在创建一个基本的cms / wiki作为学习项目。请原谅我的无聊问题。

我的维基有页面。有不同类型的页面。他们有一些共同的领域和一些独特的领域。 我已经将我的三个模型包括在内,以展示我是如何进行这项工作的。 (一个具有实际页面继承的公共字段的模型)

class DefaultPage(models.Model):
    title = models.CharField(max_length=100)
    created_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    edited_date =  models.DateTimeField(auto_now_add=False,auto_now=True)
    child_pages = models.ManyToManyField("self",blank=True)
    slug = models.SlugField(max_length=100,editable=False,blank=True)
    def __unicode__ (self): 
        return self.title
    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = slugify(self.title)
        super(DefaultPage, self).save(*args, **kwargs)

class Page(DefaultPage):
    body = models.TextField(blank=True)

class LearningObject(DefaultPage):
    archivefile = models.FileField(upload_to='static/learningobject/archivefiles/%Y/%m/%d')
    indexpath = models.CharField(max_length=254,editable=False)
    def unpackarchive(self):
        archive = self.archivefile
        filename = os.path.basename(str(archive))

        folder = str(filename).split(".")[0]
        print folder
        index_found = "False"
        with zipfile.ZipFile(archive,"r") as z:
            for each in z.namelist():
                if each == "index.html" or each == "index.htm":
                    index_found = "True"
                else:
                    pass
            if not index_found:
                print "zip file does not contain a valid index.html file"
            else:
                path = os.path.join("static","learningobject","unpackedarchives",folder)
                z.extractall(path)
                self.findindex(path)
    def findindex(self,path):

        print path
        for root, dirnames, filenames in os.walk(path):
            for filename in fnmatch.filter(filenames, 'index.ht*'):
                print filename
                self.indexpath = os.path.join(root, filename)
        print self.indexpath

    def save(self, *args, **kwargs):
        self.unpackarchive()
        super(LearningObject, self).save(*args, **kwargs)

我的urls.py将defaultpage.slug传递给

url(r'^(?P<default_page_slug>[\w\-]+)/$', views.defaultpageview, name='defaultpageview'),

DefaultPage.objects.get(slug = default_page_slug)

的视图
def defaultpageview(request, default_page_slug):
context_dict = {}
try:
    default_page = DefaultPage.objects.get(slug=default_page_slug)
    context_dict['default_page'] = default_page

except:
    pass
return render(request,'wiki/default_page.html',context_dict)

反过来又以模板

结束
 <!DOCTYPE html>
<html>
    <head>
        <title>{{default_page.title}}</title>
    </head>

    <body>
       <h1>{{default_page.title}}</h1>
       {% if default_page.body %}
       <p>
        {{default_page.body}}
        <p>
          {%elif default_page.indexpath %}
          {{default_page.indexpath}}
          {% endif  %}




    </body>
</html>

但是我无法调用default_page.indexpath或default_page.body

我是否能够使用我正在尝试的方法,或者我是否需要在视图中传递所有模型而不是父模型?

很抱歉,如果我使用的条款不正确。请随时编辑以纠正我。

1 个答案:

答案 0 :(得分:0)

您正在查询DefaultPage对象,以便获得所需内容。 DefaultPage对象没有任何这些字段;只有子类才有。如果您想使用body,则需要查询包含该字段的类,并且indexpath也是如此。