From 73cfe06c583caf5228ca50bb993d9ec04be4e80e Mon Sep 17 00:00:00 2001 From: Adil Mohak Date: Sat, 5 Oct 2024 01:46:58 +0300 Subject: [PATCH] Fix: unknown field choice --- accounts/apps.py | 7 ++++--- accounts/signals.py | 2 +- quiz/forms.py | 27 +++++++++++++++++---------- quiz/models.py | 1 + quiz/translation.py | 24 +++++++++++++++++------- 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/accounts/apps.py b/accounts/apps.py index e9ee8c6..5f93240 100644 --- a/accounts/apps.py +++ b/accounts/apps.py @@ -1,13 +1,14 @@ from django.apps import AppConfig -from django.db.models.signals import post_save -from .models import User -from .signals import post_save_account_receiver class AccountsConfig(AppConfig): name = "accounts" def ready(self) -> None: + from django.db.models.signals import post_save + from .models import User + from .signals import post_save_account_receiver + post_save.connect(post_save_account_receiver, sender=User) return super().ready() diff --git a/accounts/signals.py b/accounts/signals.py index 9194683..6a4cfa0 100644 --- a/accounts/signals.py +++ b/accounts/signals.py @@ -5,7 +5,7 @@ from .utils import ( ) -def post_save_account_receiver(instance=None, created=False): +def post_save_account_receiver(instance=None, created=False, *args, **kwargs): """ Send email notification """ diff --git a/quiz/forms.py b/quiz/forms.py index 4bbbced..b54448c 100644 --- a/quiz/forms.py +++ b/quiz/forms.py @@ -42,9 +42,9 @@ class QuizAddForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(QuizAddForm, self).__init__(*args, **kwargs) if self.instance.pk: - self.fields[ - "questions" - ].initial = self.instance.question_set.all().select_subclasses() + self.fields["questions"].initial = ( + self.instance.question_set.all().select_subclasses() + ) def save(self, commit=True): quiz = super(QuizAddForm, self).save(commit=False) @@ -59,6 +59,7 @@ class MCQuestionForm(forms.ModelForm): model = MCQuestion exclude = () + class MCQuestionFormSet(forms.BaseInlineFormSet): def clean(self): """ @@ -69,10 +70,14 @@ class MCQuestionFormSet(forms.BaseInlineFormSet): super().clean() # Collect non-deleted forms - valid_forms = [form for form in self.forms if not form.cleaned_data.get('DELETE', True)] + valid_forms = [ + form for form in self.forms if not form.cleaned_data.get("DELETE", True) + ] - valid_choices = ['choice' in form.cleaned_data.keys() for form in valid_forms] - if(not all(valid_choices)): + valid_choices = [ + "choice_text" in form.cleaned_data.keys() for form in valid_forms + ] + if not all(valid_choices): raise forms.ValidationError("You must add a valid choice name.") # If all forms are deleted, raise a validation error @@ -80,12 +85,14 @@ class MCQuestionFormSet(forms.BaseInlineFormSet): raise forms.ValidationError("You must provide at least two choices.") # Check if at least one of the valid forms is marked as correct - correct_choices = [form.cleaned_data.get('correct', False) for form in valid_forms] + correct_choices = [ + form.cleaned_data.get("correct", False) for form in valid_forms + ] if not any(correct_choices): raise forms.ValidationError("One choice must be marked as correct.") - - if correct_choices.count(True)>1: + + if correct_choices.count(True) > 1: raise forms.ValidationError("Only one choice must be marked as correct.") @@ -94,7 +101,7 @@ MCQuestionFormSet = inlineformset_factory( Choice, form=MCQuestionForm, formset=MCQuestionFormSet, - fields=["choice", "correct"], + fields=["choice_text", "correct"], can_delete=True, extra=5, ) diff --git a/quiz/models.py b/quiz/models.py index 2600b94..97b6e57 100644 --- a/quiz/models.py +++ b/quiz/models.py @@ -13,6 +13,7 @@ from django.db.models.signals import pre_save from django.urls import reverse from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ +from django.dispatch import receiver from model_utils.managers import InheritanceManager from course.models import Course diff --git a/quiz/translation.py b/quiz/translation.py index de6a8e4..cce9c51 100644 --- a/quiz/translation.py +++ b/quiz/translation.py @@ -1,21 +1,31 @@ from modeltranslation.translator import register, TranslationOptions from .models import Quiz, Question, Choice, MCQuestion + @register(Quiz) class QuizTranslationOptions(TranslationOptions): - fields = ('title', 'description',) - empty_values=None + fields = ( + "title", + "description", + ) + empty_values = None + @register(Question) class QuestionTranslationOptions(TranslationOptions): - fields = ('content', 'explanation',) - empty_values=None + fields = ( + "content", + "explanation", + ) + empty_values = None + @register(Choice) class ChoiceTranslationOptions(TranslationOptions): - fields = ('choice',) - empty_values=None + fields = ("choice_text",) + empty_values = None + @register(MCQuestion) class MCQuestionTranslationOptions(TranslationOptions): - pass \ No newline at end of file + pass