python - Django 'NoneType' 对象没有属性 'filter'
问题描述
任务:一次将单个用户分配给模型。
错误:
Django 'NoneType' 对象没有属性 'filter'
models.py是_
class Post(models.Model):
post_tag = models.ForeignKey(ProjectUser, related_name="user_tag", blank=True, null=True,on_delete=models.CASCADE)
ProjectUser在哪里:
from django.contrib.auth.models import AbstractUser
class ProjectUser(AbstractUser):
def __str__(self):
return self.username
.html代码是:
% for post_user in objects %}
<form method='POST' action="{% url 'a_tag' post_user.id %}">
{% csrf_token %}
<input type='hidden'>
{% if post_user.id in assigned_user %}
<button type='submit'>Cancel</button>
{% else %}
<button type='submit'>Start</button>
{% endif %}
</form>
urls.py是_
path('<int:tag>', views.tag_analyst, name='a_tag'),
views.py函数是<- ,这里的属性导致错误Filter
add
remove
def tag_analyst(request, tag):
post = get_object_or_404(Post, id=tag)
if request.method == 'POST':
if post.post_tag.filter(id=request.user.id).exists():
post.post_tag.remove(request.user)
else:
post.post_tag.add(request.user)
return HttpResponseRedirect(reverse('homepage'))
views.py 类
class View(LoginRequiredMixin, ListView):
context_object_name = "objects"
model = Post
template_name = "page.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['assigned_user'] = self.request.user.user_tag.values_list('id', flat=True)
return context
解决方案
post_tag
是 的ForeignKey
字段Post
,因此post.post_tag
是对象(或None
在这种情况下),但不是Manager
. 所以你不能filter()
。
你可以检查一下if post.post_tag
。如果True
用户关联,则为False
( None
),否则为 ( )。
推荐阅读
- architecture - 在基于主干的开发中如何使用功能标志和库中的重大更改
- web-scraping - 访问具有相同类名的第二个 div 节点
- matlab - 在 MATLAB 中将 2 位有符号整数转换为 8 位有符号整数
- sitecore - Sitecore SXA:您的网站已以线框模式导出
- postgresql - 如何使用 PostgreSQL 的 UTC 偏移量获取 ISO 格式的时间?
- c++11 - 在虚拟方法中推断“this”的类型名
- php - 为什么mysql查询返回零值?
- sql - 用于替换特定列中部分字符串的 REPLACE 函数
- r - 将数据框与一列中的列表保存为制表符分隔的单个条目“.txt”文件
- php - 从 localhost 连接到在线数据库时,用户 'totallig_root'@'197.210.64.73' 的访问被拒绝(使用密码:YES)