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

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -