Не удается преобразовать ключевое слово '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

Вернуться на верх