我正在构建一个列出课程的Web应用程序。我可以根据地点和类别筛选课程。但是,下一步是允许用户登录并将课程分配给他们的个人资料。我挣扎的地方是根据登录凭证过滤课程。它可以完成吗?我找不到任何东西,我一直在寻找几天。我将从课程提供者开始。该过滤器在登录具有外键的过程中,当然仪表盘(有每个组织多门课程):基于登录详细信息的Django过滤
class ProviderProfile(models.Model):
organisation = models.ForeignKey(Provider)
username = models.ForeignKey(User)
firstname = models.CharField(max_length=200)
lastname = models.CharField(max_length=200)
email = models.EmailField(max_length=200)
一旦用户登录并点击了仪表板视图,我想它返回所有与该组织有关的课程附于ProviderProfile
。课程模型在模型中具有以下内容:provider = models.ForeignKey(Provider)
。以下是我如何在其他视图中过滤课程的示例:
class Courses_By_Location(LoginRequiredMixin, ListView):
template_name = 'courses/course_list.html'
model = models.Course
context_object_name = 'courses'
def dispatch(self, request, *args, **kwargs):
self.location = kwargs.get('location', 'DEFAULT-LOCATION')
return super().dispatch(request, *args, **kwargs)
def get_queryset(self):
return date_screen(
super().get_queryset().filter(location__gen_local__iexact=
self.location).order_by('date'),
)
raw_courses = date_screen(models.Course.objects.all())
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['locations'] = location_screen(self.raw_courses)
context['categories'] = category_screen(self.raw_courses)
return context
这适用于按窗体中选定位置进行过滤。我的方法是以某种方式(这是我坚持的一点)得到登录所属的组织,并根据该组织进行过滤。 LoginRequiredMixin
也有一个问题,没有它的查询集。我猜测他们以某种方式压倒了它。编辑:由于其他人的要求,我给出了该课程的模型:
class Course(models.Model):
provider = models.ForeignKey(Provider)
title = models.CharField('Course Title', max_length=200,)
first_line = models.CharField('Address Line: 1', max_length=200,)
second_line = models.CharField('Address Line: 2', max_length=200,)
third_line = models.CharField('Address Line: 3', max_length=200,)
city = models.CharField('City', max_length=200,)
post_code = models.CharField('Post Code', max_length=200,)
course_description = models.TextField('Description')
date = models.DateField('Date')
start_time = models.TimeField('Starting time')
finish_time = models.TimeField('Finishing time')
duration = models.IntegerField('Number of hours')
CPD = models.IntegerField('CPD points')
link = models.CharField('Link', max_length=200)
category = models.ForeignKey(Categories)
gen_cat = models.ForeignKey(Gen_Categories)
location = models.ForeignKey(Gen_Location)
cost = models.FloatField('Cost')
非常感谢您花时间阅读本文。为了达到这个目的,我烧了很多天。通过登录凭证和重写LoginRequiredMixin
过滤器上的任何指针将不胜感激。
许多感谢您的回答中找到,我已经篡改它,以滤除课程但是,它现在只是说对象现在具有属性'提供者'。这里是代码:'def get_queryset(self): return super()。get_queryset()。filter(username = self.request.user, provider__provider__iexact = self.provider ).order_by('date')'我有还上传了模型incase有任何混淆。 – max89