Django - от класса к функции - PullRequest
       4

Django - от класса к функции

0 голосов
/ 05 августа 2020

Я тренируюсь Django. Этот код взят из одного из руководств. В основном прямо сейчас я практикуюсь в представлении на основе функций, однако приведенный ниже код основан на классе. Как я могу преобразовать его в представление на основе функций?

Просмотр:

class  MovieCategory(ListView):
    model = Movie
 
    def get_queryset(self):
       self.category= self.kwargs['category']
       movies = Movie.objects.filter(category = self.category)
       return movies

    def get_context_data(self,**kwargs):
        context = super(MovieCategory,self).get_context_data(**kwargs)
        context['movie_category'] = self.category
        return context

Модель:

    LANGUAGE_CHOICES = (
           
        ('en','ENGLISH'),
        ('gr','GERMAN'),
    
    )
    
    class Movie(models.Model):
        title = models.CharField(max_length=100)
        discription = models.TextField(max_length=1000)
        image = models.ImageField(upload_to='movies')
        category = models.CharField(choices=CATEGORY_CHOICES , max_length=20)
        language =  models.CharField(choices=LANGUAGE_CHOICES , max_length=20)

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Можно попробовать так:

# view
def movie_category_list_view(request, category):
    movies = Movie.objects.filter(category=category)
    context = {
        "movies": movies,
        "category": category
    }
    return render(request, "movies.html", context)

# urls.py
path('<str:category>/movies/', movie_category_list_view, name="moviecategory")
1 голос
/ 05 августа 2020

Это можно сделать так:

def movie_category_view(request):
    category = request.GET.get("category")
    if category is None:
        raise Http404("Category doesn't exist")
    movies = Movie.objects.filter(category = category)
    context = {
        "movie_category": category,
    }
    return render(request, "your/template/path", context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...