【发布时间】: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