囧,好像是我之前哪里不對(duì)滥壕,實(shí)驗(yàn)了一下原本附帶的代碼沒(méi)有下文的問(wèn)題
現(xiàn)行django最新版本是1.11纸颜,官方文檔沒(méi)中文翻譯懶得看.....在閱讀這篇1.10版本的django教程→追夢(mèng)少年的博客中的第七章時(shí)遇到了一點(diǎn)問(wèn)題
在新增帖子點(diǎn)擊保存時(shí)報(bào)錯(cuò),顯示
AttributeError at /admin/luca/post/add/
'Post' object has no attribute 'publish'
Post對(duì)象沒(méi)有pulish屬性绎橘,一臉懵比胁孙,看下方評(píng)論沒(méi)人碰到這個(gè)問(wèn)題的樣子,自己Google搜了下也沒(méi)啥有意思的解答称鳞,只能自己試著找代碼問(wèn)題涮较。
Post這個(gè)對(duì)象在哪定義的呢?
在第三章的models.py中定義的
class Post(models.Model):
"""
文章的數(shù)據(jù)庫(kù)表稍微復(fù)雜一點(diǎn)冈止,主要是涉及的字段更多狂票。
"""
# 文章標(biāo)題
title = models.CharField(max_length=70)
# 文章正文,我們使用了 TextField熙暴。
# 存儲(chǔ)比較短的字符串可以使用 CharField闺属,但對(duì)于文章的正文來(lái)說(shuō)可能會(huì)是一大段文本,因此使用 TextField 來(lái)存儲(chǔ)大段文本周霉。
body = models.TextField()
# 這兩個(gè)列分別表示文章的創(chuàng)建時(shí)間和最后一次修改時(shí)間掂器,存儲(chǔ)時(shí)間的字段用 DateTimeField 類型。
created_time = models.DateTimeField()
modified_time = models.DateTimeField()
# 文章摘要俱箱,可以沒(méi)有文章摘要国瓮,但默認(rèn)情況下 CharField 要求我們必須存入數(shù)據(jù),否則就會(huì)報(bào)錯(cuò)。
# 指定 CharField 的 blank=True 參數(shù)值后就可以允許空值了乃摹。
excerpt = models.CharField(max_length=200, blank=True)
# 這是分類與標(biāo)簽厂财,分類與標(biāo)簽的模型我們已經(jīng)定義在上面。
# 我們?cè)谶@里把文章對(duì)應(yīng)的數(shù)據(jù)庫(kù)表和分類峡懈、標(biāo)簽對(duì)應(yīng)的數(shù)據(jù)庫(kù)表關(guān)聯(lián)了起來(lái),但是關(guān)聯(lián)形式稍微有點(diǎn)不同与斤。
# 我們規(guī)定一篇文章只能對(duì)應(yīng)一個(gè)分類肪康,但是一個(gè)分類下可以有多篇文章,所以我們使用的是 ForeignKey撩穿,即一對(duì)多的關(guān)聯(lián)關(guān)系磷支。
# 而對(duì)于標(biāo)簽來(lái)說(shuō),一篇文章可以有多個(gè)標(biāo)簽食寡,同一個(gè)標(biāo)簽下也可能有多篇文章雾狈,所以我們使用 ManyToManyField,表明這是多對(duì)多的關(guān)聯(lián)關(guān)系抵皱。
# 同時(shí)我們規(guī)定文章可以沒(méi)有標(biāo)簽善榛,因此為標(biāo)簽 tags 指定了 blank=True。
# 如果你對(duì) ForeignKey呻畸、ManyToManyField 不了解移盆,請(qǐng)看教程中的解釋,亦可參考官方文檔:
# 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 導(dǎo)入的咒循。
# django.contrib.auth 是 Django 內(nèi)置的應(yīng)用,專門(mén)用于處理網(wǎng)站用戶的注冊(cè)绞愚、登錄等流程叙甸,User 是 Django 為我們已經(jīng)寫(xiě)好的用戶模型。
# 這里我們通過(guò) ForeignKey 把文章和 User 關(guān)聯(lián)了起來(lái)位衩。
# 因?yàn)槲覀円?guī)定一篇文章只能有一個(gè)作者裆蒸,而一個(gè)作者可能會(huì)寫(xiě)多篇文章,因此這是一對(duì)多的關(guān)聯(lián)關(guān)系蚂四,和 Category 類似光戈。
author = models.ForeignKey(User)
似乎確實(shí)沒(méi)有publish方法啊,報(bào)錯(cuò)好像理所當(dāng)然遂赠?
于是看了一下之前因?yàn)閐jango版本是1.8略舊被我拋在一邊沒(méi)繼續(xù)看的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
果然是沒(méi)定義出的錯(cuò)!
所以那些人怎么會(huì)成功運(yùn)行的呢...跷睦?
當(dāng)然筷弦,除了這里還有admin.py也要按照這篇文章進(jìn)行小改動(dòng),細(xì)節(jié)就不寫(xiě)了,然后就成功運(yùn)行了~~
比起打牌還是pokemon更有意思