Я пытаюсь создать UserProfileView с именем пользователя в URL-адресе. Собственно с реальными настройками как-то работает. Проблема в том, что любое расширение имени пользователя в URL-адресе перенаправляет на профиль пользователя, вошедшего в систему. И никакая информация не поступает в шаблон, когда я пытаюсь войти в профиль без входа в систему. Вот мой код, любая помощь приветствуется.
models.py
class Profile(models.Model):
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
email = models.EmailField(max_length=150)
bio = models.TextField(max_length=280, blank=True)
avatar = models.ImageField(default='default.jpg', upload_to='avatars/')
def __str__(self):
return '@{}'.format(self.user.username)
def save(self):
super().save()
img = Image.open(self.avatar.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size, Image.BICUBIC)
img.save(self.avatar.path)
views.py
class UserProfileView(SelectRelatedMixin, TemplateView):
model = Profile
template_name = 'accounts/profile.html'
select_related = ('user',)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
def get_success_url(self):
return reverse('accounts:profile', kwargs={'user': self.object.user})
urls.py
urlpatterns = [
path('<str:username>/', views.UserProfileView.as_view(), name='profile')
]
profile.html (как я называю связанные данные в шаблоне)
<h3>{{ user.profile }}</h3>
<p>{{ user.profile.email }}</p>
<p>{{ user.profile.bio }}</p>
<h3>{{ profile }}</h3>
* обновление для более четкого объяснения:
username
поле наUser
илиProfile
модели? Пытаюсь понять, почему вы используете представление для профиля, а не только для пользователя ... - person GProst   schedule 16.10.2020UserView
вместоUserProfileView
, который использует модельUser
вместоProfile
? Не было бы проще? Я вижу, что в шаблоне вы все равно получаете доступ кprofile
черезuser.profile
... - person GProst   schedule 16.10.2020def get_queryset(self): queryset = super().get_queryset() return queryset.filter(user__username__iexact=self.kwargs.get('user.username'))
- person Ediz   schedule 16.10.2020