Python 使用CustomUser模型添加和删除好友
现在,我在为我的朋友启动“添加/删除视图”功能时遇到了一些问题。 主要错误是“WSGIRequest”对象没有属性“CustomUser” 我在页面上显示用户列表时也遇到问题。 我确信问题在于使用自定义用户模型,但我找不到合适的解决方案。 这些始终是错误字符串:Python 使用CustomUser模型添加和删除好友,python,django,Python,Django,现在,我在为我的朋友启动“添加/删除视图”功能时遇到了一些问题。 主要错误是“WSGIRequest”对象没有属性“CustomUser” 我在页面上显示用户列表时也遇到问题。 我确信问题在于使用自定义用户模型,但我找不到合适的解决方案。 这些始终是错误字符串: Friends.make_friend(request.CustomUser, new_friend) Friends.lose_friend(request.CustomUser, new_friend) 这是我的编辑后的代码,
Friends.make_friend(request.CustomUser, new_friend)
Friends.lose_friend(request.CustomUser, new_friend)
这是我的编辑后的代码,可以正常工作:
views.py:
def change_friends(request, operation, pk):
new_friend = CustomUser.objects.get(pk=pk)
if operation == 'add':
Friends.make_friend(request.user, new_friend)
elif operation == 'remove':
Friends.lose_friend(request.user, new_friend)
return redirect('/users/user_list')
def users_list(request):
users = CustomUser.objects.exclude(email=request.user.email)
friend = Friends.objects.get_or_create(current_user = request.user)
friend = Friends.objects.get(current_user = request.user)
print(type(friend))
friends = friend.users.all().exclude(email=request.user.email)
user_list = CustomUser.objects.all().exclude(email=request.user.email)
user_dict = {'user_list' : user_list, 'friends' : friends}
return render(request, 'users\\users_list.html', context = user_dict)
models.py:
class Friends(models.Model):
users = models.ManyToManyField(CustomUser, related_name = 'friend_set')
current_user = models.ForeignKey(CustomUser, related_name = 'owner', null = True, on_delete = models.CASCADE)
@classmethod
def make_friend(cls, current_user, new_friend):
friend, created = Friends.objects.get_or_create(
current_user=current_user
)
friend.users.add(current_user, new_friend)
@classmethod
def lose_friend(cls, current_user, new_friend):
friend, created = Friends.objects.get_or_create(
current_user=current_user
)
friend.users.remove(current_user, new_friend)
users/url.py:
urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name = "users/login.html"), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name = 'logout'),
path('signup/', views.SignUp.as_view(), name = 'signup'),
path('user_list/', views.users_list, name = "user_list"),
re_path(r'^connect/(?P<operation>.+)/(?P<pk>\d+)/$', views.change_friends, name = 'change_friends'),
]
admin.py:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser, Friends
from . import models
# Register your models here.
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ('email', 'is_staff', 'is_active',)
list_filter = ('email', 'is_staff', 'is_active',)
fieldsets = (
(None, {'fields': ('first_name', 'last_name', 'email', 'password', 'birth_date', 'gender')}),
('Permissions', {'fields': ('is_staff', 'is_active')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password', 'is_staff', 'is_active')}
),
)
search_fields = ('email',)
ordering = ('email',)
admin.site.register(CustomUser, CustomUserAdmin)
admin.site.register(Friends)
用户\u list.html:
{% if user_list %}
<div class="container">
<ul>
{% for users in user_list %}
<li style='padding: 4px'>{{ users.first_name }} {{ users.last_name }}
{% if not users in friends %}
<a href="{% url 'users:change_friends' operation='add' pk=users.pk %}">
<button type="button">Add</button>
</a>
{% endif %}
</li>
{% endfor %}
</ul>
</div>
{% endif %}
<h2>Friends list:</h2>
{% if user.is_authenticated %}
{% for friend in friends %}
<li>{{ friend.first_name }} {{ friend.last_name }}</li>
<a href="{% url 'users:change_friends' operation='remove' pk=friend.pk %}">
<button type="button">Remove</button>
</a>
{% endfor %}
{% else %}
<p>You don't have friends yet!</p>
{% endif %}
WSGI对象不包含
CustomUser
它只包含user
对象
因此,请将change\u friends
函数更改为
def change_friends(request, operation, pk):
new_friend = CustomUser.objects.get(pk=pk)
if operation == 'add':
# here you should use request.user instead of request.CustomUser
Friends.make_friend(request.user, new_friend)
elif operation == 'remove':
# here also
Friends.lose_friend(request.user, new_friend)
return redirect('posts:all')
AUTH_USER_MODEL = 'users.CustomUser'
def change_friends(request, operation, pk):
new_friend = CustomUser.objects.get(pk=pk)
if operation == 'add':
# here you should use request.user instead of request.CustomUser
Friends.make_friend(request.user, new_friend)
elif operation == 'remove':
# here also
Friends.lose_friend(request.user, new_friend)
return redirect('posts:all')