Python django';非类型';对象没有属性';指标集';
我有以下问题,我实现了一个ajax函数,以便能够在创建问题时有一个相关的下拉列表,但问题出现在保存问题并将我发送到页面添加问题时,有人能告诉我我错了吗 错误:Python django';非类型';对象没有属性';指标集';,django,python-3.x,django-forms,Django,Python 3.x,Django Forms,我有以下问题,我实现了一个ajax函数,以便能够在创建问题时有一个相关的下拉列表,但问题出现在保存问题并将我发送到页面添加问题时,有人能告诉我我错了吗 错误: Traceback (most recent call last): File "C:\Users\Oficina\AppData\Local\Programs\Python\Python37-32\lib\site packages\django\core\handlers\exception.py", line 34, in inn
Traceback (most recent call last):
File "C:\Users\Oficina\AppData\Local\Programs\Python\Python37-32\lib\site
packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\Oficina\AppData\Local\Programs\Python\Python37-32\lib\site-
packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Oficina\AppData\Local\Programs\Python\Python37-32\lib\site-
packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Oficina\AppData\Local\Programs\Python\Python37-32\lib\site-
packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\Oficina\AppData\Local\Programs\Python\Python37-32\lib\site-
packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Proyectos\proyecto-educa-quiz\classroom\views\teachers.py", line 733, in question_change
form = QuestionForm(instance=question, quiz=quiz)
File "C:\Proyectos\proyecto-educa-quiz\classroom\forms.py", line 450, in __init__
self.fields['indicador'].queryset = self.instance.objetivo.indicador_set.order_by('id')
AttributeError: 'NoneType' object has no attribute 'indicador_set'
这是我的代码:
forms.py:
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
context_object_name = 'questions'
fields = ('number','objetivo','indicador','text','description', 'texto' ,'puntaje' ,'image','document','video')
label = 'Pregunta'
def __init__(self ,quiz ,*args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['objetivo'].queryset = Planificacion.objects.filter(asignatura_id = quiz.subject.id, curso_id = quiz.curso.id)
self.fields['indicador'].queryset = PlanificacionIndicador.objects.none()
self.fields['texto'].queryset = TextoQuestion.objects.filter(owner__id=quiz.owner.id)
if 'objetivo' in self.data:
try:
objetivo_id = int(self.data.get('objetivo'))
self.fields['indicador'].queryset = PlanificacionIndicador.objects.filter(objetivo_id=objetivo_id).order_by('indicador_evaluacion')
except (ValueError, TypeError):
pass
elif self.instance.pk:
self.fields['indicador'].queryset = self.instance.objetivo.indicador_set.order_by('id')
view.py:
@login_required
@teacher_required
def question_change(request, quiz_pk, question_pk):
AnswerFormSet = inlineformset_factory(
Question, # modelo padre
Answer, # modelo base
formset=BaseAnswerInlineFormSet,
fields=('text' ,'is_correct'),
min_num=2,
validate_min=True,
max_num=4,
validate_max=True,
)
if request.method == 'POST':
form = QuestionForm(quiz ,request.POST, request.FILES ,instance=question)
formset = AnswerFormSet(request.POST, request.FILES, instance=question)
if form.is_valid() and formset.is_valid():
with transaction.atomic():
form.save()
formset.save()
messages.success(request, 'Pregunta y respuestas guardadas exitosamente!')
return redirect('teachers:quiz_change', quiz.pk)
else:
form = QuestionForm(instance=question, quiz=quiz)
formset = AnswerFormSet(instance=question_pk)
return render(request, 'classroom/teachers/question_change_form.html', {
'quiz': quiz,
'question': question,
'form': form,
'formset': formset
})
models.py:
class Question(models.Model):
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='questions')
number = models.IntegerField(verbose_name=("Número de la pregunta"))
objetivo = models.ForeignKey(Planificacion, on_delete=models.SET_NULL, related_name='questions', verbose_name=('Objetivo aprendizaje'), blank=True, null=True)
indicador = models.ForeignKey(PlanificacionIndicador, on_delete=models.SET_NULL, related_name='questions', verbose_name=('Indicador Evaluación'), blank=True, null=True)
text = models.CharField('Pregunta', max_length=255)
texto= models.ForeignKey(TextoQuestion, on_delete=models.CASCADE, blank=True, null=True, verbose_name=('Texto'),help_text='Si tienes algún texto creado para esta prueba seleccionalo si no dejalo en blanco.')
image = models.ImageField( null = True, upload_to='quiz_images',default=False, blank=True,verbose_name=('Imagen'))
document = models.FileField(null=True, upload_to='quiz_images',default= False, blank=True,verbose_name=('Audio'))
video = models.FileField(null=True, upload_to='quiz_images',default= False, blank=True,verbose_name=('Video'))
description = models.CharField(max_length=255, null= True, blank=True, verbose_name=("Descripción") )
puntaje = models.IntegerField(verbose_name=("Puntos"), help_text=("Puntaje que tendra cada pregunta que dara un total para la nota final del alumno."))
objects = InheritanceManager()
def __str__(self):
return self.text
self.instance.objetivo
是None
。创建一个if…
子句并进行适当的检查。@JPG我该怎么做?您可以推荐一些文档,我仍在学习使用django框架编程。