Python 异常值:“非类型”对象没有属性“添加”,类别名称不显示Django
我试图让用户创建一个帖子并选择一个类别,但当它选择一个类别并发布它时,它给了我一个错误:异常值:“NoneType”对象没有属性“add”。 如果我去我的数据库,无论我键入什么,它都是保存的,除了类别\ u id是空的 这是我的密码 views.py:Python 异常值:“非类型”对象没有属性“添加”,类别名称不显示Django,python,django,Python,Django,我试图让用户创建一个帖子并选择一个类别,但当它选择一个类别并发布它时,它给了我一个错误:异常值:“NoneType”对象没有属性“add”。 如果我去我的数据库,无论我键入什么,它都是保存的,除了类别\ u id是空的 这是我的密码 views.py: @login_required(login_url='login') def userposts_create_view(request): form= UserPostForm(request.POST or None) #print(
@login_required(login_url='login')
def userposts_create_view(request):
form= UserPostForm(request.POST or None)
#print(request.POST)
if request.POST:# form.is_valid():
#data = form.cleaned_data
#print(data)
#categories = data.pop('categories', None)
categories = request.POST['categories']
content = request.POST['content']
title = request.POST['title']
public = False
if 'public' in request.POST and request.POST['public'] == 'on':
public = False
else:
public=True
#print(f"{categories}, {content}, {title}, {public}")
#user_post = UserPost.objects.create(**data, user=request.user)
user_post = UserPost.objects.create(content=content, title=title, public=public, user=request.user)#, categories=categories)
categories = Categories.objects.filter(name=Categories.name)
print(categories)
user_post.categories.get(categories)
return HttpResponseRedirect("/posted/")
context= {'form': form}
return render(request, 'posts/userposts-create-view.html', context)
#list view
@login_required(login_url='login')
def userposts_list_view(request):
allposts= UserPost.objects.all()
context= {'allposts': allposts,
}
return render(request, 'posts/userposts-list-view.html', context)
#detail view
@login_required(login_url='login')
def userposts_detail_view(request, id=None):
post= get_object_or_404(UserPost, id=id)
context= {'post': post,
}
return render(request, 'posts/userposts-detail-view.html', context)
我假设错误一定在模型中,但不确定
Models.py
class Categories(models.Model):
name = models.CharField(max_length=100, verbose_name='Nombre')
def __str__(self):
return self.name
User= settings.AUTH_USER_MODEL
class UserPost(models.Model):
user= models.ForeignKey(User, null=False, editable=False, verbose_name='Usuario', on_delete=models.CASCADE)
title= models.CharField(max_length=500, null=False)
content= models.TextField(null=False)
categories = models.ForeignKey(Categories, null=True, blank=True, on_delete=models.CASCADE)
public = models.BooleanField(verbose_name='Privada?',default=True)
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Creado el ')
updated_at = models.DateTimeField(auto_now=True, verbose_name='Actualizado el ')
def __str__(self):
return self.title + ' | ' + str(self.user)
def save(self, *args, **kwargs):
super(UserPost, self).save(*args, **kwargs)
Forms.py
from django import forms
from .models import UserPost
class UserPostForm(forms.ModelForm):
class Meta:
model= UserPost
fields= ["title", "content","categories","public"]
创建_view.html
{%extends 'layouts/layout.html'%}
<html>
<head>
<meta charset="UTF-8">
{% block title %}
Post
{% endblock title %}
</head>
<body>
<h1>Create Post</h1>
{% block content %}
<form enctype="multipart/form-data" method="POST" action="">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Post"/>
</form>
{% endblock content %}
url.py
from django.urls import path
from . import views
from django.conf.urls import url, include
urlpatterns = [
path('articulos/', views.list, name = "list_articles"), #se utilizaria page para el menu
path('categoria/<int:category_id>', views.category, name="category"),
path('articulo/<int:article_id>', views.article, name="article"),
path('create/', views.userposts_create_view, name='create'),
path('posted/', views.userposts_list_view, name='list_view'),
path('posted/<int:id>', views.userposts_detail_view, name='one_posts'),
path('tus_ideas', views.index_page, name='tus_ideas')
]
如果categories在UserPost模型中是一个多个字段,而在代码中是一个外键,那么user_post.categories.add*categories将起作用
将类别字段更改为:
类UserPostmodels.Model:
...
categories=models.ManyToManyField'categories',null=True,blank=True
请试试这个:
@login_required(login_url='login')
def userposts_create_view(request):
form= UserPostForm(request.POST or None)
if request.POST:
categories = request.POST['categories']
content = request.POST['content']
title = request.POST['title']
public = False
if 'public' in request.POST and request.POST['public'] == 'on':
public = False
else:
public=True
user_post = UserPost.objects.create(content=content, title=title, public=public, user=request.user,categories_id=categories)
return HttpResponseRedirect("/posted/")
context= {'form': form}
return render(request, 'posts/userposts-create-view.html', context)
categories=models.ForeignKey'categories',null=True,blank=True,on\u delete=models.CASCADE请将其更改为categories=models.foreignkeycogories,null=True,blank=True,on\u delete=models.CASCADE。不使用单引号。@RiyasAc我这样做了,但仍然给我相同的问题请添加URL.py文件和html模板刚才添加了URL和html模板@RiyasAc,它现在给了我这个错误异常值:“ForwardManyToneDescriptor”对象不是ITerable请更改categories=categories.objects.filtername=categories.name到categories=categories.objects.filtername=c.name谢谢!你可能知道为什么当我看到这篇文章时,在ideas部分会显示:blog.Categories.none你需要用for循环显示这些类别:{user_post.Categories.all%}{{cat.name}{%endfor%}