У объекта Django «NoneType» нет атрибута «фильтр» - PullRequest
0 голосов
/ 03 апреля 2019

Задача: Чтобы назначить одного пользователя модели одновременно.

Ошибка:

Объект 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 имеют значение <- </strong> 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

1 Ответ

2 голосов
/ 03 апреля 2019

post_tag - это поле ForeignKey для Post, поэтому post.post_tag - это объект (или None в данном случае), но не Manager. Так что вы не можете filter().

Вы можете просто проверить if post.post_tag. Это будет True, если пользователь связан, и False (None), если нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...