Python 异常值:“非类型”对象没有属性“添加”,类别名称不显示Django

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(

我试图让用户创建一个帖子并选择一个类别,但当它选择一个类别并发布它时,它给了我一个错误:异常值:“NoneType”对象没有属性“add”。 如果我去我的数据库,无论我键入什么,它都是保存的,除了类别\ u id是空的

这是我的密码

views.py:

@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%}