django - How to route DetailView to inherit user and slug -
i have simple detailview:
class trackdetails(detailview): model = track and in urls.py:
url(r'^(?p<slug>[-\w]+)/$', trackdetails.as_view(), name='track-details'), the model:
class track(models.model): .... # variables track_type_choices = [ ('org', 'original'), ('rmx', 'remix'), ('clb', 'collab'), ('liv', 'live'), ] # model fields user = models.foreignkey(user, unique=false) title = models.charfield(max_length=100) desc = models.textfield(max_length=7500) track_type = models.charfield(max_length=3, choices=track_type_choices, default='org') track_type_content = models.charfield(max_length=100,blank=true) created = models.timefield(auto_now=true,auto_now_add=false) upload = models.filefield(upload_to=generate_user_folder_tracks,storage=overwritestorage(),validators=[is_mp3]) albumart = models.imagefield(upload_to=generate_user_folder_art,storage=overwritestorage(),validators=[is_square_png]) private = models.booleanfield(default=false) downloadable = models.booleanfield(default=false) likes = models.manytomanyfield(user, related_name="likes",blank=true) dislikes = models.manytomanyfield(user, related_name="dislikes",blank=true) plays = models.bigintegerfield(default=0) slug = models.slugfield(max_length=50,unique=true) the model displayed in view has "user" field connected user model, want use in url, instead of writing "www.domain.com/slug/" write "www.domain.com/user/slug" access view of instance.
additionally, have extended user model field called "display_name", i'd show field instead of username in template (track_detail.html):
{% include '__header.html' %} {% load static staticfiles %} <div id="track_container"> <div id="track_titleinfo"> <div id="track_artist" class="text">{{ object.user }}</div> <div id="track_title" class="text">{{ object.title }}</div> {% if object.track_type == 'org' %} {% else %} <div id="track_type" class="text">({{object.track_type_content}})</div> {% endif %} </div> </div> {% include '__footer.html' %} <img src="/static/users/{{ object.user }}/art/{{ object.slug }}.png" alt=""> the div id "track_artist" displays raw username (in case, enitoni), i'd display display_name (in case "ekchö") userprofile class of user owns track instance:
class userprofile(models.model): user = models.onetoonefield(user) display_name = models.charfield(max_length=50, default="null") def create_user_profile(sender, instance, created, **kwargs): if created: userprofile.objects.create(user=instance) post_save.connect(create_user_profile, sender=user)
to include username in detail view, first need add url patterns.
url(r'^(?p<username>[-\w]+)/(?p<slug>[-\w]+)/$', trackdetails.as_view(), name='track-details'), then, since using detailview, need override get_object use username , slug fetch object.
from django.shortcuts imporg get_object_or_404 class trackdetails(detailview): model = track def get_object(self, queryset=none): return get_object_or_404( track, user__username=self.kwargs['username'], slug=self.kwargs['slug'],, ) displaying display_name of user in template separate problem. if have user, can follow 1 one key backwards profile user.userprofile. therefore, in template can show display_name with.
{{ object.user.userprofile.display_name }}
Comments
Post a Comment