【问题标题】:Django 'NoneType' object has no attribute 'filter'Django 'NoneType' 对象没有属性 'filter'
【发布时间】:2019-04-03 10:49:24
【问题描述】:

任务:一次将单个用户分配给模型。

错误:

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 函数是 Filteraddremove 属性导致错误

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    post_tagPostForeignKey 字段,所以post.post_tag 是一个对象(或在本例中为None),但不是Manager。所以你不能filter()

    您可以查看if post.post_tag。如果用户已关联,则为 True,否则为 False (None)。

    【讨论】:

    • 我将其更改为 if request.method == 'POST': if post.post_tag: post.post_tag = False else: post.post_tag=True 我需要该 html 按钮来更改该字段的状态,无论是否分配了用户。我得到Cannot assign "True": "Post.post_tag" must be a "ProjectUser" instance.
    • 您可以将其设置为Nonerequest.user。正如我所说,post.post_tagProjectUser 对象或 None
    • 我试过这个if post.post_tag: post.post_tag = None else: post.post_tag = request.user,它卡在else statement,当我检查管理视图时,我看不到任何分配。我需要保存吗?
    • 是的,如果您更改 post 对象的任何属性并希望将其提交到数据库,则需要保存它。
    【解决方案2】:
    class Question(models.Model):
    webregister = models.ForeignKey(Webregister, on_delete=models.CASCADE)
    que = models.CharField(max_length=255,null=True, blank=True)
    
        def __str__(self):
            return str(self.pk)
    
    
    orgs = Question.objects.filter(webregister=module,que__isnull=True)
    orgs.delete()
    

    【讨论】:

    • 请考虑添加一些文字评论
    猜你喜欢
    • 2021-08-03
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2014-10-24
    • 2016-04-23
    • 2016-10-21
    相关资源
    最近更新 更多