现在我在为朋友功能启动添加/删除视图时遇到了一些麻烦。 主要错误是'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 / urls.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'),
]
managers.py:
from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import ugettext_lazy as _
class CustomUserManager(BaseUserManager):
"""
Custom user model manager where email is the unique identifiers
for authentication instead of usernames.
"""
def create_user(self, email, password, **extra_fields):
"""
Create and save a User with the given email and password.
"""
if not email:
raise ValueError(_('The Email must be set'))
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password, **extra_fields):
"""
Create and save a SuperUser with the given email and password.
"""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_active', True)
if extra_fields.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff=True.'))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
return self.create_user(email, password, **extra_fields)
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)
users_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 %}
在settings.py中添加了:
AUTH_USER_MODEL = 'users.CustomUser'
答案 0 :(得分:0)
WSGI对象不包含function toggleTheme() {
document.body.classList.toggle('dark-mode');
var btn = document.getElementById("myButton");
if (btn.textContent === "Dark Mode") return btn.textContent = "Day Mode";
btn.textContent = "Dark Mode"
}
,而仅包含CustomUser
对象。
因此,请将user
函数更改为
change_friends