Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- models.py:
- class Subject(models.Model):
- SUBJECT_CHOICES = ()
- name = models.CharField(max_length=20,choices=SUBJECT_CHOICES)
- def __str__(self):
- return self.name
- class Course(models.Model):
- SKILL_LEVEL_CHOICES = (
- ('Beginner', 'Beginner'),
- ('Intermediate', 'Intermediate'),
- ('Advanced', 'Advanced'),
- )
- slug = models.SlugField()
- title = models.CharField(max_length=120)
- description = models.TextField()
- allowed_memberships = models.ManyToManyField(Membership)
- created_at = models.DateTimeField(auto_now_add=True)
- subjects = models.ManyToManyField(Subject)
- skill_level = models.CharField(max_length=20,choices=SKILL_LEVEL_CHOICES, null=True)
- visited_times = models.IntegerField(default=0)
- def __str__(self):
- return self.title
- def get_absolute_url(self):
- return reverse('courses:detail', kwargs={'slug': self.slug})
- @property
- def lessons(self):
- return self.lesson_set.all().order_by('position')
- class Meta:
- ordering = ('title',)
- views.py:
- class CourseListView(ListView):
- model = Course
- def get_queryset(self):
- qs = super().get_queryset()
- title_contains_query = self.request.GET.get('title_contains')
- view_count_min = self.request.GET.get('view_count_min')
- view_count_max = self.request.GET.get('view_count_max')
- date_min = self.request.GET.get('date_min')
- date_max = self.request.GET.get('date_max')
- skill_level_query = self.request.GET.get('skill_level')
- if title_contains_query:
- qs = qs.filter(title__icontains=title_contains_query)
- if view_count_min:
- qs = qs.filter(visited_times__gte=view_count_min)
- if view_count_max:
- qs = qs.filter(visited_times__lte=view_count_max)
- if date_min:
- qs = qs.filter(created_at__gte=date_min)
- if date_max:
- qs = qs.filter(created_at__lte=date_max)
- if skill_level_query:
- qs = qs.filter(skill_level=skill_level_query)
- return qs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement