所附的图像显示了我当前的问题。图片中的数学270和数学280是由另一个用户创建的,而不是创建Jays课程的Jay。但是,另一个用户当前已登录,而不是Jay。我怎样才能让登录用户创建的课程,而不是Jay,出现在下拉菜单中
在我看来,我有以下解决问题的尝试:
class CreateQuestion(LoginRequiredMixin, CreateView):
model = Question
fields = ["title", "question", 'classe']
template_name = "attendance_test/add_test.html"
def form_valid(self, form):
form.instance.instructor = self.request.user
return super(CreateQuestion, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(CreateQuestion, self).get_context_data(**kwargs)
context['classe'] = Classe.objects.filter(professor=self.request.user.id)
return context
def get_initial(self):
return { 'classe': Classe.objects.filter(professor=self.request.user.id) }
我的问题模型:
class Question(models.Model):
title = models.CharField(max_length=100)
question = models.TextField(max_length=500)
date_pub = models.DateTimeField(auto_now_add=True)
instructor = models.ForeignKey(Teacher, on_delete=models.CASCADE, default="")
# this is where all the courses are showing up, I only want those
# created by the "instructor" to show up, not all instructors
classe = models.ForeignKey(Classe, on_delete=models.CASCADE, null=True)
def professor_classes(self):
return Classe.objects.filter(professor=self.professor)
教师模式:
class Teacher(User):
isProfessor = models.BooleanField(default=False)
professor_courses = models.ForeignKey('Classe', on_delete=models.CASCADE, null=True)
如果有1000节课的话,这个问题就会成为一个问题,但是一个老师只想到4节课,当996节课与它们无关时,显示所有1000节课是没有意义的。根据记录,我以前问过这个问题,我得到了一个答案,但我还是没能解决它
你可以试试这样的
根据Django应用程序的结构,有很多方法可以解决这个问题。例如,一种方法可以是:
这将根据当前登录的用户筛选类
尽管我认为从
User
继承Teacher
模型是不正确的。在这种情况下,更高效的传统解决方案是使用聚合:另外,您的代码也有问题:
initial
是表单字段的初始选定值,它不是允许的值范围。通过设置initial
,可以为表单字段设置初始选定值context
是传递到模板中的变量的dict。所以我相信您不需要在视图中定义get_context
(或者至少它不需要传递Classes
列表)相关问题 更多 >
编程相关推荐