簡體   English   中英

Django 2.0 CreateView AttributeError

[英]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:4512.12.2018 13:45 2018-03-13 13:45 - 兩者都不起作用。

問題在於你的SlugField。 unique_for_date參數需要指向包含日期或日期時間的字段 - 您已將其設置為指向方法, publish 大概你的意思是published_date

模型字段上的unique_for_date屬性應設置為DateFieldDateTimeField名稱。 它確保使用unique_for_date和DateFieldDateTimeField設置為unique_for_date ,字段組合將有唯一記錄。

例如,如果您有兩個字段:

published_date = models.DateTimeField()
slug = models.SlugField(unique_for_date="published_date")

然后,Django不允許使用相同的published_dateslug輸入兩個記錄。

您可以在django docs上閱讀更多相關信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM