簡體   English   中英

Django ValueError位於/ feed / new /

[英]Django ValueError at /feed/new/

我正在嘗試創建我的社交迷你社交網絡項目的feed部分。 我有一個處理所有用戶帖子的“提要”應用程序。 一切正常,除了我在用戶post_form頁面上提交帖子時,出現此錯誤:

ValueError at /feed/new/
invalid literal for int() with base 10: 'User'

我不太確定問題是什么,但這是我的代碼。 追溯也不會突出顯示任何內容,但是如果您想看到它,請告訴我。

供稿應用網址:

from django.conf.urls import url
from feed import views

app_name = 'feed'

urlpatterns = [
    url(r'^new/$',views.CreatePostView.as_view(),name='new_post'),
    url(r'^post/(?P<pk>\d+)/edit/$',views.UpdatePostView.as_view(),name='edit_post'),
    url(r'^post/(?P<pk>\d+)/delete/$',views.DeletePostView.as_view(),name='delete_post'),
    url(r'^post/(?P<pk>\d+)/comment/$',views.add_comment_to_post,name='add_comment_to_post'),
]

Feed應用的觀看次數:

from django.shortcuts import render,get_object_or_404,redirect
from django.utils import timezone
from feed.models import UserPost,UserComment
from feed.forms import PostForm,CommentForm
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import (TemplateView,ListView,
                                    DetailView,CreateView,
                                    UpdateView,DeleteView)

# Create your views here.

##Posts Views
class HomeView(LoginRequiredMixin,ListView):
    login_url = 'login'
    model = UserPost
    ordering = ['-post_date']

class CreatePostView(LoginRequiredMixin,CreateView):
    login_url = 'login'
    redirect_field_name = '/userpost_list.html'
    form_class = PostForm
    model = UserPost

class UpdatePostView(LoginRequiredMixin,UpdateView):
    login_url = 'login'
    redirect_field_name = '/userpost_detail.html'
    form_class = PostForm
    model = UserPost

class DeletePostView(LoginRequiredMixin,DeleteView):
    model = UserPost
    success_url = reverse_lazy('userpost_list')


##Comments Views
def add_comment_to_post(request,pk):
    post = get_object_or_404(UserPost,pk=pk)
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.save()
            return redirect('userpost_list',pk=userpost.pk)
        else:
            form = CommentForm()
        return render(request,'feed/userpost_list.html',{'form':form})

不知道是否需要此功能,但以下是Feed應用程序表單:

from django import forms
from feed.models import UserPost,UserComment

class PostForm(forms.ModelForm):
    class Meta():
        model = UserPost
        fields = ('title','post_body')

        widget = {
            'title':forms.TextInput(attrs={'class':'post-title'}),
            'post_body':forms.Textarea(attrs={'class':'post-body'}),
        }

class CommentForm(forms.ModelForm):
    class Meta():
        model = UserComment
        fields = ('comment_body',)

        widgets = {
            'comment_body':forms.TextInput(attrs={'class':'comment-body'}),
        }

Feed應用模型:

from django.db import models
from django.core.urlresolvers import reverse
from django.conf import settings

from django.contrib.auth import get_user_model
User = get_user_model()

# Create your models here.
class UserPost(models.Model):
    author = models.ForeignKey(User,related_name='userpost',default='User')
    post_date = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=150,blank=False)
    post_body = models.TextField(max_length=1000,blank=False)

    def publish(self):
        self.save()

    def get_absolute_url(self):
        return reverse('index')

    def __str__(self):
        return self.title

class UserComment(models.Model):
    post = models.ForeignKey('feed.UserPost',related_name='comments')
    author = models.ForeignKey(User,related_name='usercomment')
    comment_date = models.DateTimeField(auto_now_add=True)
    comment_body = models.TextField(max_length=500)

    def publish(self):
        self.save()

    def get_absolute_url(self):
        return reverse("userpost_list")

    def __str__(self):
        return self.text

問題出在您的模型中-字符串'User'不是有效的用戶。

class UserPost(models.Model):
    author = models.ForeignKey(User, related_name='userpost', default='User')

最簡單的解決方法是刪除默認設置:

class UserPost(models.Model):
    author = models.ForeignKey(User, related_name='userpost')

但是,除非您設置null=True ,否則您將在CreatePostView得到錯誤,因為您是在不設置用戶的情況下創建帖子的。 您可以通過覆蓋form_valid並在保存表單之前將作者設置為self.request.user來解決此問題:

class CreatePostView(LoginRequiredMixin,CreateView):
    login_url = 'login'
    redirect_field_name = '/userpost_list.html'
    form_class = PostForm
    model = UserPost

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super(CreatePostView, self).form_valid(form)

暫無
暫無

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

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