Не удается преобразовать ключевое слово 'slug' в поле. Варианты: id, location, profile_image, stories, twitter, user, user_id, website
Я пытаюсь создать страницу профиля для пользователя, когда я нажимаю на кнопку создать профиль, вместо того, чтобы показать мне шаблон редактирования, который позволит мне редактировать все эти поля, он выдает мне ошибку, подобную этой: Не удается преобразовать ключевое слово 'slug' в поле. Варианты: id, location, profile_image, stories, twitter, user, user_id, website Я следую Django UpdateView
Я хочу, чтобы пользователь мог создать профиль. Как я могу решить эту проблему?
урлы:
path('editprofile/<slug:slug>/edit', views.EditProfileView.as_view(), name='editProfile'),
модели:
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
profile_image = models.ImageField(upload_to="avatars/")
stories = models.TextField(max_length=500,blank=True, null=True)
website = models.URLField(max_length=250, blank=True, null=True)
twitter = models.URLField(max_length=250, blank=True, null=True)
location = models.CharField(max_length=50, blank=True, null=True)
мнения:
@login_required(login_url='login')
def profile(request, pk):
profiles = Profile.objects.filter(user=request.user)
questions = Question.objects.filter(user=request.user)
context = {'questions':questions, 'profiles':profiles}
return render(request, 'profile.html', context)
class EditProfileView(UpdateView):
model = Profile
fields = ['profile_image', 'stories', 'website', 'twitter', 'location']
template_name = 'edit_profile.html'
success_url = reverse_lazy('index')
шаблон профиля:
<div class="container">
<div class="row">
<a href="{% url 'editProfile' user.id %}" class="btn btn-primary">Create Profile</a>
</div>
</div>
В вашей модели Profile
отсутствует поле slug.
а Django UpdateView
использует id профиля для идентификации пользователя, а не slug
Два способа решения этой проблемы:
1: Вам нужно обновить модель профиля, добавить поле slug.
1.slug = models.SlugField()
def save(self, *args, **kwargs):
self.slug = slugify(self.user)
super(Creator, self).save(*args, **kwargs)
и обновить список полей в EditProfileView.
2: Вам нужно переопределить логику по умолчанию, используемую Django UpdateView
для идентификации пользователя на основе Slug вместо его id