[英]Django 2.0 CreateView AttributeError
為什么我得到AttributeError:'function'對象沒有屬性'day' ?
我想為編輯博客帖子創建簡單的generict視圖。
views.py:
class CreatePostView(LoginRequiredMixin, CreateView):
login_url = '/login/'
redirect_field_name = 'blog/post_detail.html'
model = Post
form_class = PostForm
models.py中的post模型如下所示:
class Post(models.Model):
title = models.CharField(max_length=200)
short_description = models.CharField(max_length=350)
slug = models.SlugField(unique_for_date='publish')
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
text = models.TextField()
created_date = models.DateTimeField(auto_now_add=True)
published_date = models.DateTimeField(default=None, blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def get_absolute_url(self):
ret_url_context = {'pk':self.pk}
if self.published_date:
ret_url_context['slug'] = self.slug
ret_url_context['year'] = self.published_date.year
ret_url_context['month'] = self.published_date.month
ret_url_context['day'] = self.published_date.day
return reverse("post_detail",kwargs=ret_url_context)
def __str__(self):
return self.title
urls.py:
urlpatterns = [
path('', views.PostListView.as_view(), name='post_list'),
path('about/', views.AboutView.as_view(), name='about'),
path('drafts/', views.DraftListView.as_view(), name='post_draft_list'),
path('post/new/', views.CreatePostView.as_view(), name='post_new'),
path('post/<int:pk>/edit/', views.PostUpdateView.as_view(), name='post_edit'),
path('post/<int:pk>/remove/', views.PostDeleteView.as_view(), name='post_remove'),
path('post/<int:pk>/publish/', views.post_publish, name='post_publish'),
path('<int:year>/<int:month>/<int:day>/<slug:slug>/', views.PostDetailView.as_view(), name="post_detail_date"),
path('post/<str:slug>/', views.PostDetailView.as_view(), name='post_detail'),
]
最后我的html表單是siple post_form.html:
{% extends 'blog/base.html' %}
{% block content %}
<h1>New post</h1>
<form method="POST" class="post-form">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}
我在form.py中的表單:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = 'title', 'slug', 'short_description', 'author', 'text', 'published_date'
#fields = '__all__'
widgets = {
'title': forms.TextInput(attrs={'class': 'textinputclass'}),
'text': forms.Textarea(attrs={'class': 'editable medium-editor-textarea postcontent'}),
'published_date': forms.DateTimeInput(attrs={},format="%Y-%m-%d %H:%M"),
}
我不知道應該從哪里開始尋找解決方案。 但我認為問題在於插入日期和時間。 我正在插入編輯本文: 12.12.2018 13:45
或12.12.2018 13:45
2018-03-13 13:45
- 兩者都不起作用。
問題在於你的SlugField。 unique_for_date
參數需要指向包含日期或日期時間的字段 - 您已將其設置為指向方法, publish
。 大概你的意思是published_date
。
模型字段上的unique_for_date
屬性應設置為DateField
或DateTimeField
名稱。 它確保使用unique_for_date和DateField
或DateTimeField
設置為unique_for_date
,字段組合將有唯一記錄。
例如,如果您有兩個字段:
published_date = models.DateTimeField()
slug = models.SlugField(unique_for_date="published_date")
然后,Django不允許使用相同的published_date
和slug
輸入兩個記錄。
您可以在django docs上閱讀更多相關信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.