Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用CustomUser模型添加和删除好友_Python_Django - Fatal编程技术网

Python 使用CustomUser模型添加和删除好友

Python 使用CustomUser模型添加和删除好友,python,django,Python,Django,现在,我在为我的朋友启动“添加/删除视图”功能时遇到了一些问题。 主要错误是“WSGIRequest”对象没有属性“CustomUser” 我在页面上显示用户列表时也遇到问题。 我确信问题在于使用自定义用户模型,但我找不到合适的解决方案。 这些始终是错误字符串: Friends.make_friend(request.CustomUser, new_friend) Friends.lose_friend(request.CustomUser, new_friend) 这是我的编辑后的代码,

现在,我在为我的朋友启动“添加/删除视图”功能时遇到了一些问题。 主要错误是“WSGIRequest”对象没有属性“CustomUser” 我在页面上显示用户列表时也遇到问题。 我确信问题在于使用自定义用户模型,但我找不到合适的解决方案。 这些始终是错误字符串:

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')