【问题标题】:FieldError: Cannot resolve keyword 'username_iexact' into fieldFieldError:无法将关键字“username_iexact”解析为字段
【发布时间】:2021-05-23 07:50:50
【问题描述】:

当我尝试访问 GroupList。我收到 FieldError: Cannot resolve keyword 'username_iexact' into field。这发生在views.py中get_queryset()的try块中。我尝试了很多,但不知道如何解决这个问题。 这就是我得到的:

File "C:\Users\welcome\Desktop\python\python&Django\socialmedia project\simplesocial\posts\views.py", line 29, in get_queryset
    self.post_user=User.objects.prefetch_related('posts').get(username_iexact=self.kwargs.get('username'))
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\query.py", line 418, in get
    clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\query.py", line 942, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\query.py", line 962, in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, *args, **kwargs)
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\query.py", line 969, in _filter_or_exclude_inplace
    self._query.add_q(Q(*args, **kwargs))
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\sql\query.py", line 1358, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\sql\query.py", line 1377, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\sql\query.py", line 1258, in build_filter
    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\sql\query.py", line 1084, in solve_lookup_type
    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
  File "C:\anaconda\envs\virblogEnv\lib\site-packages\django\db\models\sql\query.py", line 1481, in names_to_path
    raise FieldError("Cannot resolve keyword '%s' into field. "
django.core.exceptions.FieldError: Cannot resolve keyword 'username_iexact' into field. Choices are: date_joined, email, first_name, group, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, posts, user, user_groups, user_permissions, username

这是我的意见.py:-

from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
# POSTS VIEWS.PY

from django.http import Http404
from django.views import generic

from braces.views import SelectRelatedMixin
from . import models
from . import forms
from django.contrib import messages

from django.contrib.auth import get_user_model
User=get_user_model()
                                                        
class PostList(SelectRelatedMixin,generic.ListView):
    model=models.Post
    select_related=('user','group')


class UserPosts(generic.ListView):
    model=models.Post
    template_name='posts/user_post_list.html'


    def get_queryset(self):
        try:
            self.post_user=User.objects.prefetch_related('posts').get(username_iexact=self.kwargs.get('username'))
        except User.DoesNotExist:
            raise Http404

        else:
            return self.post_user.posts.all()


    def get_context_data(self,**kwargs):
        context=super().get_context_data(**kwargs)
        context['post_user']=self.post_user
        return context      


class PostDetail(SelectRelatedMixin,generic.DetailView):
    model=models.Post
    select_related=('user','group')

    def get_queryset(self):
        queryset=super().get_queryset()
        return queryset.filter(user__username__iexact=self.kwargs.get('username'))




class CreatePost(LoginRequiredMixin,SelectRelatedMixin,generic.CreateView):
    fields=('message','group')
    model=models.Post

    def form_valid(self,form):
        self.object=form.save(commit=False)
        self.object.user=self.request.user
        self.object.save()
        return super().form_valid(form)


class DeletePost(LoginRequiredMixin,SelectRelatedMixin,generic.DeleteView):

    model=models.Post
    select_related=('user','group')
    success_url=reverse_lazy('posts:all')

    def get_queryset(self):
        queryset=super().get_queryset()
        return queryset.filter(user_id=self.request.user.id)

    def delete(self,*args,**kwargs):
        messages.success(self.request,'Post Deleted')
        return super().delete(*args,**kwargs)

这是我的models.py:-

# POSTS MODELS.PY FILE

from django.db import models
from django.urls import reverse
from django.conf import settings

import misaka

from groups.models import Group

from django.contrib.auth import get_user_model
User=get_user_model()



class Post(models.Model):
    user=models.ForeignKey(User,related_name='posts',on_delete=models.CASCADE)
    created_at=models.DateTimeField(auto_now=True)
    message=models.TextField()
    message_html=models.TextField(editable=False)
    group=models.ForeignKey(Group,related_name='posts',null=True,blank=True,on_delete=models.CASCADE)

    def __str__(self):
        return self.message

    def save(self,*args,**kwargs):
        self.message_html=misaka.html(self.message)
        super().save(*args,**kwargs)

    def get_absolute_url(self):
        return reverse('posts:single',kwargs={'username':self.user.username,'pk':self.pk})

    class Meta():
        ordering=['-created_at']
        unique_together=['user','message']

这是我的 group_list.html:-

{% extends 'groups/group_base.html'%}

{% block pregroup %}
<div class="col-md-4">
    <div class="content">
        {% if user.is_authenticated %}
            <h2>Welcome back!!
                <a href="{% url 'posts:for_user' username=user.username %}">
                    @{{user.username}}
                </a>    
            </h2>


        {% endif %}

        <h2>Groups</h2>
        <p>Welcome to the groups page!</p>

    </div>
    {% if user.is_authenticated %}
        <a href="{% url 'groups:create' %}" class="btn btn-md btn-fill btn-warning">
            <span class="glyphicon glyphicon-plus-sign"></span>Create New group
        </a>
    
    {% endif%}

</div>

{% endblock %}


{% block group_content %}
    <div class="col-md-8">
        <div class="list-group">
            {% for group in object_list %}
                <a class='list-group-item' href="{% url 'groups:single' slug=group.slug %}">
                    <h3 class="title list-group-item-heading">{{group.name}}</h3>
                    <div class="list-group-item-text container-fluid">
                        {{group.description_html|safe}}
                        <div class="row">
                            <div class="col-md-4">
                                <span class="badge">{{group.members.count}}</span>
                                member{{group.members.count|pluralize}}
                            </div>
                            <div class="col-md-4">
                                <span class="badge">{{group.posts.count}}</span>
                                post{{group.posts.count|pluralize}}
                            </div>
                        </div>
                    </div>
                </a>
                {% endfor %}
        </div>
    </div>
{% endblock %}

请帮帮我!!

【问题讨论】:

    标签: django


    【解决方案1】:

    字段名和查找由 两个 连续的下划线 (__) 分隔,因此您可以使用:

    self.post_user=User.objects.prefetch_related('posts').get(
        username__iexact=self.kwargs.get('username')
    )

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2019-05-26
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      相关资源
      最近更新 更多