У меня странная проблема: я создал пользователя и профиль пользователя, затем я создаю функцию, которая приводит к сохранению пользователя в качестве экземпляра в профиле пользователя, поскольку вы можете видеть приведенный ниже код, который мне нужен, когда кто-то щелкает пользователя, который создает сообщение, которое вернется на страницу профиля этого пользователя, но этого не произойдет. что происходит, когда я нажимаю на пользователя, предположим, я использую имя пользователя с именем Abdin, и мне нужно нажать на John, проблема в том, что страница вернет меня обратно на страницу моего профиля, в данный момент (Abdin), также если я хочу измените пользователя, поэтому я войду в систему с пользователем John, и когда мне нужно будет нажать на Abdin, я вернусь обратно в профиль John, а не в профиль Abdin, однако, когда я проверю страницу, чтобы убедиться в URL-адресе пользователя Я вижу, что этот URL-адрес правильный, но он не ведет меня на нужную страницу, так в чем же ошибку, которую я сделал здесь?
# account app
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.template.defaultfilters import slugify
CHOICE = [('male', 'male'), ('female', 'female')]
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
slug = models.SlugField(max_length=100, unique=True, blank=True)
overview = models.TextField(editable=True, blank=True, default='You have no an Overview yet')
city = models.CharField(max_length=20, blank=False)
phone = models.IntegerField(default=0, blank=True)
sex = models.CharField(max_length=10, default='male', choices=CHOICE)
skill = models.CharField(max_length=100, default='You have no skills yet')
logo = models.ImageField(upload_to='images/', default='images/default-logo.jpg', blank=True)
def __str__(self):
return self.user.username
def save(self, *args, **kwargs):
self.slug = slugify(self.user)
super().save(*args, **kwargs)
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile = UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(receiver=create_profile, sender=User)
# приложение учетной записи
views.py
from .forms import SignUp, ResetPassword, EditForm, UpdateAvatarForm, UpdateInfoForm
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required, permission_required
from django.utils.decorators import method_decorator
from django.contrib.auth.views import PasswordResetView, PasswordResetDoneView
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from django.core.mail import send_mail
from .models import UserProfile
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect, HttpResponseBadRequest
from django.views.generic import View, CreateView, UpdateView, DeleteView
from django.contrib import messages
class PasswordReset(PasswordResetView, FormView):
template_name = 'account/password_reset_view.html'
email_template_name = 'account/reset_password_email.html'
subject_template_name = 'account/password_reset_subject.txt'
form_class = ResetPassword
def get_success_url(self):
return reverse_lazy('account:password_reset_done')
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user_mail = form.cleaned_data['email']
user_mail = User.objects.get(email=user_mail)
if user_mail.email:
return HttpResponseRedirect(self.get_success_url())
def dispatch(self, request, *args, **kwargs):
post_form = self.request.POST
if post_form:
try:
self.post(request)
except User.DoesNotExist:
messages.error(self.request, 'This User Does Not Exist')
return redirect('account:password_reset')
return super().dispatch(request, *args, **kwargs)
class PasswordResetDone(PasswordResetDoneView):
template_name = 'account/password_reset_done.html'
# Reset Your Password By G-mail Account
def send_mail(self, request, **kwargs):
subject = "Complete the modification of the password form"
message = "please check here"
send_mail(subject=subject,
message=message,
from_email=request.user.email,
recipient_list=[request.user.email],
fail_silently=False)
return render(request, self.template_name)
# User registration
class Register(CreateView):
template_name = 'account/register.html'
form_class = SignUp
success_url = reverse_lazy('account:login')
def form_invalid(self, form):
response = super().form_invalid(form)
messages.error(self.request, 'username is already exists. please try another one.')
if User.objects.filter(email=self.request.POST['email']).exists():
messages.error(self.request, 'email is already exists. please try another one.')
return redirect('account:register')
return redirect('account:register')
# view profile page
class ViewProfile(UpdateView):
queryset = UserProfile.objects.all()
template_name = 'account/profile.html'
form_class = UpdateInfoForm
model = UserProfile
slug_field = 'slug'
slug_url_kwarg = 'user_slug'
def get_success_url(self):
return reverse_lazy('account:view_profile', kwargs={'user_slug': self.request.user.userprofile.slug})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['info'] = UpdateInfoForm(instance=self.request.user.userprofile)
user_prof = UserProfile.objects.get(user=self.request.user)
context['user_prof'] = user_prof
if self.request.POST:
context['info'] = UpdateInfoForm(self.request.POST, instance=self.request.user.userprofile)
if context['info'].is_valid():
context['info'].save()
context['get_favourite'] = User.objects.get(username=self.request.user.username).favorite.all()
return context
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
# приложение учетной записи urls.py
from django.urls import path
from . import views
from django.contrib.auth.views import (LoginView, LogoutView, PasswordResetCompleteView)
from django.urls import reverse_lazy
from django.contrib import messages
from django.shortcuts import redirect
app_name = 'account'
class LoginRedirect(LoginView):
template_name = 'account/login.html'
def get_success_url(self):
return reverse_lazy('account:view_profile', args=[self.request.user.userprofile.slug])
def form_invalid(self, form):
response = super().form_invalid(form)
messages.error(self.request, 'username or password are invalid. please try again.')
return redirect('account:login')
urlpatterns = [
# /account/login/
path('login/', LoginRedirect.as_view(), name='login'),
# /account/logout/
path('logout/', LogoutView.as_view(template_name='account/logout.html', next_page=reverse_lazy('account:login')), name='logout'),
# /account/register/
path('register/', views.Register.as_view(), name='register'),
# /account/view-profile/
path('view-profile/<slug:user_slug>/', views.ViewProfile.as_view(), name='view_profile'),
# /account/edit-profile/
path('edit-profile/<slug:user_slug>/', views.EditView.as_view(), name='edit_profile'),
# /account/password-change/
path('password-reset/', views.PasswordReset.as_view(), name='password_reset'),
# /account/password-change/done/
path('password-reset-done/', views.PasswordResetDone.as_view(), name='password_reset_done'),
# /account/password-copmlete/
path('password-copmlete/', PasswordResetCompleteView.as_view(template_name='account/password_complete.html'),
name='password_complete'),
# /account/user-image/12/
path('user-image/<slug:user_slug>/', views.UserImage.as_view(), name="user_image"),
# /account/new-image/
path('new-image/<slug:user_slug>/', views.UpdateAvatar.as_view(), name="add_avatar"),
# /account/delete-user/medoabdin/
path('delete-user/<slug:user_slug>/', views.remove_user, name="remove_user"),
]
# приложение сообщества
models.py
from django.db import models
from account.models import UserProfile
from django.contrib.auth.models import User
from django.utils import timezone
from django.template.defaultfilters import slugify
from django.urls import reverse
CHOICE = [('Technology', 'Technology'), ('Computer Science', 'Computer Science'),
('Lawyer', 'Lawyer'), ('Trading', 'Trading'),
('Engineering', 'Engineering'), ('Life Dialy', 'Life Dialy')
]
class UserAsking(models.Model):
userprofile = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
title = models.CharField(max_length=100, blank=False, help_text='Be specific and imagine you’re asking a question to another person')
question = models.TextField(max_length=500, blank=False, help_text='Include all the information someone would need to answer your question')
field = models.CharField(max_length=20, choices=CHOICE, default='Technology', help_text='Add the field to describe what your question is about')
date = models.DateTimeField(auto_now_add=True)
ask_slug = models.SlugField(max_length=100)
likes = models.ManyToManyField(User, related_name='likes', blank=True)
dislikes = models.ManyToManyField(User, related_name='dislikes', blank=True)
favorite = models.ManyToManyField(User, related_name='favorite', blank=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('community:question_view', kwargs={'user_slug': self.ask_slug})
def save(self, *args, **kwargs):
self.ask_slug = slugify(self.title)
super().save(*args, **kwargs)
# приложение сообщества
question_view. html
<div class="col-sm-4">
<div class="row">
<div class="users">
<div class="fl-right">
<div class="date-user-q">
<div class="avatar">
<a href="{% url 'account:view_profile' my_question.userprofile.slug %}">
<img class="img-rounded img-fluid" style="width: 50px;height:50px;display: inline-block" src="{{ my_question.userprofile.logo.url }}">
</a>
</div>
<a href="{% url 'account:view_profile' my_question.userprofile.slug %}">{{ my_question.userprofile.user.first_name }}
{{ my_question.userprofile.user.last_name }}
</a>
<p class="">{{ userasking.date|time }}</p>
</div>
</div>
</div>
</div>
</div>
# приложение сообщества views.py
class QuestionDetail(DetailView, SingleObjectMixin):
template_name = 'community/question_view.html'
slug_field = 'ask_slug'
slug_url_kwarg = 'user_slug'
model = UserAsking
queryset = UserAsking.objects.all()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['my_question'] = UserAsking.objects.get(title=self.object)
# приложение сообщества
urls.py
from . import views
from django.urls import path
app_name = 'community'
urlpatterns = [
path('', views.UserQuestions.as_view(), name='user_questions'),
path('ask-question/', views.UserAskingView.as_view(), name='user_asking'),
path('ask-question/question-view/<slug:user_slug>/', views.QuestionDetail.as_view(), name='question_view'),
path('delete-post/<slug:user_slug>/', views.DeletePost.as_view(), name="delete_post"),
path('update-post/<slug:user_slug>/', views.UpdatePost.as_view(), name="update_post"),
path('delete-comment/<int:pk>/', views.DeleteComment.as_view(), name="delete_comment"),
path('update-comment/<int:pk>/', views.UpdateComment.as_view(), name="update_comment"),
path('like/<slug:user_slug>/', views.LikePost.as_view(), name="like"),
path('dislike/<slug:user_slug>/', views.DisLikePost.as_view(), name="dislike"),
path('like-comment/<int:pk>/', views.LikeComment.as_view(), name="like_comment"),
path('favourite/<slug:user_slug>/', views.AddFavorite.as_view(), name="favourite"),
]
Примечание: я дал вам код, связанный только с этой проблемой