Python VBC视图的良好实践

Python VBC视图的良好实践,python,django,django-views,Python,Django,Django Views,我有一个关于基于类的视图的问题 我有以下看法: class UserCourseListView(ListView): model = User template_name = 'courses/user_course_list.html' def get_queryset(self): user_inscriptions = self.request.user.get_inscriptions.all() courses = [insc

我有一个关于基于类的视图的问题

我有以下看法:

class UserCourseListView(ListView):
    model = User
    template_name = 'courses/user_course_list.html'

    def get_queryset(self):
        user_inscriptions = self.request.user.get_inscriptions.all()
        courses = [inscription.course for inscription in user_inscriptions]

        return courses
该视图的目的是获取当时登录的用户已注册的课程列表。并且能够在上下文中(在模板中)访问该数据


我的疑问如下:

model
class属性是
User
模型,在
get\u queryset
estoy方法中返回
课程
模型的实例,这没有多大意义

我的问题是,这样做是好的做法吗

使用基于类的视图还有其他更好的方法吗


我提出的另一种更为一致的方法是基于函数的视图,但这并不能让我信服:

def user_course_list(request):
    user_inscriptions = request.user.get_inscriptions.all()
    courses = [inscription.course for inscription in user_inscriptions]

    return render('courses/user_course_list.html', {'courses': courses})
因为Django文档建议我们尽可能多地使用基于类的视图

更新:

我的文件
models.py

# --- --- COURSE MODEL --- ---

class Course(models.Model):
    STATUS = [('unpublish', 'No publicar'),('published', 'Publicar')]
    title = models.CharField(max_length = 60)
    subtitle = models.CharField(max_length = 120)
    price = models.DecimalField(max_digits = 5, decimal_places = 2, default = 0)
    image = models.ImageField(upload_to = manage_courses_media_files)
    description = models.TextField()
    status = models.CharField(max_length = 60, choices = STATUS, default = 'unpublish')
    instructor = models.ForeignKey(Instructor, on_delete = models.CASCADE, related_name = 'get_courses')
    slug = models.SlugField(max_length = 60)
    created = models.DateTimeField(auto_now_add = True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-created', '-updated']

    def __str__(self):
        return self.title

# --- --- INSCRIPTION MODEL --- ---

class Inscription(models.Model):
    course = models.ForeignKey(Course, on_delete = models.CASCADE, verbose_name = 'Curso')
    user = models.ForeignKey(User, on_delete = models.CASCADE, verbose_name = 'Usuario', related_name = 'get_inscriptions')
    created = models.DateTimeField(auto_now_add = True, verbose_name = 'Fecha de inscripcion')

    class Meta:
        verbose_name = 'inscripcion'
        verbose_name_plural = 'inscripciones'

    def __str__(self):
        return self.course.title

我不是很确定你的模型是如何设置的,但是当你为一个特定的模型创建一个视图集时,你可以像我在下面写的那样设置它。课程将是模型,
铭文集
将是相关名称,如果课程是铭文上的外键。现在,您可能已经在模型上自己设置了相关的_键名称,并且可以将其切换出去。我猜铭文存储了一个用户id?我不确定您的模型经理对
做了什么。请获取铭文

class UserCourseListView(ListView):
    model = Course
    queryset = Course.objects.all()
    template_name = 'courses/user_course_list.html'

    def get_queryset(self):
        courses = self.queryset.filter(inscription_set__get_inscriptions=request.user)
        return courses.all()

我收到一个错误,但我认为您即将解决我的问题,我已经更新了我的问题,显示了我的模型。根据您的编辑,我将相关名称从
用户更改为
获取铭文
,让我知道这是否有效。
无法将关键字“铭文集”解析到字段中。选择包括:购物车、已创建、描述、获取章节、id、图像、铭文、讲师、讲师id、价格、slug、状态、副标题、标题、更新
哦,将其更改为铭文,那一定是相关的名称我不懂你的意思,请更好地解释我