Well I am facing error and it\'s now its been two days to this question and still stuck on this mistake, anybody can help and able to fix this. I am new in Django and need help.
you need to add the user pk or slug in the url so that django can retrieve the user using this pk or slug so edit the url to be like this
path('<slug:username>/',UserProfileDetailView.as_view(),name = 'detail'),
but make sure that your slug equal the username of the user , to do this override the save method in your model to be like this
def save(self, *args, **kwargs):
self.slug = self.username
super(Your_Model_Name, self).save(*args, **kwargs)
make sure to change 'Your_Model_Name' with your model class name
Set slug_url_kwarg--(Django Doc) and slug_field--(Django Doc) attributes on your view class
class UserProfileDetailView(DetailView):
slug_url_kwarg = "username" # this the `argument` in the URL conf
slug_field = "your_model_field" # this is the model field name.
# Rest of your code
str
type used instead of slug
type in urls.pyUserProfileDetailView
doesn't specify your custom slug_url_kwarg
and slug_field
UserProfileDetailView
specifies UserProfile
model but UserProfile
model doesn't have attribute or method username
, which is on `User table.Reading Django's DetailView code, you'll find that the following is necessary to get your code working properly.
views.py
class UserProfileDetailView(DetailView):
slug_url_kwarg = "username"
slug_field = "username"
UserProfile is the lookup table defined for UserProfileDetailView and
get_slug_fieldmethod, which reads
slug_fieldproperty on the UserProfileDetailView doesn't support dot syntax method traversal (ie:
user.username`).
Thus either:
username
or;get_slug_field
must explicitly define slug field or;get_slug_field
must add functionality for dot syntax method traversalmodels.py
class UserProfile(models.model):
...
@property
def username(self):
self.user.username
OR
class UserProfileDetailView(DetailView):
...
def get_slug_field(self):
self.user.username
Helpful, but not necessary.
urls.py
path('<slug:username>/', UserProfileDetailView.as_view(), name = 'detail'),
Django Detail View get_slug_field
(Github): https://github.com/django/django/blob/master/django/views/generic/detail.py#L78-L80