美文网首页
django笔记,略坑的教程错误

django笔记,略坑的教程错误

作者: 碎冰op | 来源:发表于2017-07-09 22:02 被阅读172次

    囧,好像是我之前哪里不对,实验了一下原本附带的代码没有下文的问题

    现行django最新版本是1.11,官方文档没中文翻译懒得看.....在阅读这篇1.10版本的django教程→追梦少年的博客中的第七章时遇到了一点问题
    在新增帖子点击保存时报错,显示

    AttributeError at /admin/luca/post/add/
    'Post' object has no attribute 'publish'
    

    Post对象没有pulish属性,一脸懵比,看下方评论没人碰到这个问题的样子,自己Google搜了下也没啥有意思的解答,只能自己试着找代码问题。
    Post这个对象在哪定义的呢?
    第三章的models.py中定义的

    class Post(models.Model):
        """
        文章的数据库表稍微复杂一点,主要是涉及的字段更多。
        """
    
        # 文章标题
        title = models.CharField(max_length=70)
    
        # 文章正文,我们使用了 TextField。
        # 存储比较短的字符串可以使用 CharField,但对于文章的正文来说可能会是一大段文本,因此使用 TextField 来存储大段文本。
        body = models.TextField()
    
        # 这两个列分别表示文章的创建时间和最后一次修改时间,存储时间的字段用 DateTimeField 类型。
        created_time = models.DateTimeField()
        modified_time = models.DateTimeField()
    
        # 文章摘要,可以没有文章摘要,但默认情况下 CharField 要求我们必须存入数据,否则就会报错。
        # 指定 CharField 的 blank=True 参数值后就可以允许空值了。
        excerpt = models.CharField(max_length=200, blank=True)
    
        # 这是分类与标签,分类与标签的模型我们已经定义在上面。
        # 我们在这里把文章对应的数据库表和分类、标签对应的数据库表关联了起来,但是关联形式稍微有点不同。
        # 我们规定一篇文章只能对应一个分类,但是一个分类下可以有多篇文章,所以我们使用的是 ForeignKey,即一对多的关联关系。
        # 而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。
        # 同时我们规定文章可以没有标签,因此为标签 tags 指定了 blank=True。
        # 如果你对 ForeignKey、ManyToManyField 不了解,请看教程中的解释,亦可参考官方文档:
        # https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
        category = models.ForeignKey(Category)
        tags = models.ManyToManyField(Tag, blank=True)
    
        # 文章作者,这里 User 是从 django.contrib.auth.models 导入的。
        # django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
        # 这里我们通过 ForeignKey 把文章和 User 关联了起来。
        # 因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
        author = models.ForeignKey(User)
    

    似乎确实没有publish方法啊,报错好像理所当然?
    于是看了一下之前因为django版本是1.8略旧被我抛在一边没继续看的django by example中的介绍,Post是这样的

    from django.db import models
    from django.utils import timezone
    from django.contrib.auth.models import User
    
    
    class Post(models.Model):
        STATUS_CHOICES = (
            ('draft', 'Draft'),
            ('published', 'Published'),
        )
        title = models.CharField(max_length=250)
        slug = models.SlugField(max_length=250,
                                unique_for_date='publish')
        author = models.ForeignKey(User,
                                    related_name='blog_posts')
        body = models.TextField()
        publish = models.DateTimeField(default=timezone.now)
        created = models.DateTimeField(auto_now_add=True)
        updated = models.DateTimeField(auto_now=True)
        status = models.CharField(max_length=10,
                                    choices=STATUS_CHOICES,
                                    default='draft')
    
        class Meta:
            ordering = ('-publish',)
    
        def __str__(self):
            return self.title
    

    果然是没定义出的错!
    所以那些人怎么会成功运行的呢...?

    当然,除了这里还有admin.py也要按照这篇文章进行小改动,细节就不写了,然后就成功运行了~~

    luca

    比起打牌还是pokemon更有意思

    相关文章

      网友评论

          本文标题:django笔记,略坑的教程错误

          本文链接:https://www.haomeiwen.com/subject/bwdchxtx.html