Merge branch '137-credits-auch-fur-fragen' into 'master'
Resolve "Credits auch für Fragen" Closes #137 See merge request enrichment-2024/qivip!94
This commit is contained in:
@@ -8,7 +8,7 @@ class QivipQuizAdmin(admin.ModelAdmin):
|
|||||||
list_filter = ('status', 'category') # Filteroptionen
|
list_filter = ('status', 'category') # Filteroptionen
|
||||||
# Für das QivipQuestion Modell
|
# Für das QivipQuestion Modell
|
||||||
class QivipQuestionAdmin(admin.ModelAdmin):
|
class QivipQuestionAdmin(admin.ModelAdmin):
|
||||||
list_display = ('id', 'quiz_id', 'data', 'creation_date', 'update_date')
|
list_display = ('id', 'quiz_id', 'data', 'creation_date', 'update_date', 'credits')
|
||||||
search_fields = ('data',)
|
search_fields = ('data',)
|
||||||
list_filter = ('quiz_id',)
|
list_filter = ('quiz_id',)
|
||||||
|
|
||||||
|
|||||||
18
django/library/migrations/0054_qivipquestion_credits.py
Normal file
18
django/library/migrations/0054_qivipquestion_credits.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.1.7 on 2025-06-13 16:10
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('library', '0053_questionimage_quizimage_alter_qivipquestion_image_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='qivipquestion',
|
||||||
|
name='credits',
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -98,6 +98,7 @@ class QivipQuestion(models.Model):
|
|||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
related_name="questions"
|
related_name="questions"
|
||||||
)
|
)
|
||||||
|
credits=models.TextField(blank=True, editable=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.data[:50]
|
return self.data[:50]
|
||||||
|
|||||||
@@ -417,6 +417,10 @@ def new_question(request):
|
|||||||
|
|
||||||
|
|
||||||
question.time_per_question = request.POST.get('time_per_question', '30')
|
question.time_per_question = request.POST.get('time_per_question', '30')
|
||||||
|
try:
|
||||||
|
question.credits=request.POST.get('credits',"")
|
||||||
|
except:
|
||||||
|
question.credits=""
|
||||||
question.save()
|
question.save()
|
||||||
#return modified(request, pk=quiz.pk)
|
#return modified(request, pk=quiz.pk)
|
||||||
return redirect('library:detail_quiz', pk=quiz.pk)
|
return redirect('library:detail_quiz', pk=quiz.pk)
|
||||||
@@ -582,7 +586,10 @@ def edit_question(request, pk):
|
|||||||
|
|
||||||
question.data = json.dumps(json_data)
|
question.data = json.dumps(json_data)
|
||||||
question.time_per_question = request.POST.get('time_per_question', '30')
|
question.time_per_question = request.POST.get('time_per_question', '30')
|
||||||
|
try:
|
||||||
|
question.credits=request.POST.get('credits',"")
|
||||||
|
except:
|
||||||
|
question.credits=""
|
||||||
|
|
||||||
question.save()
|
question.save()
|
||||||
for img in QuestionImage.objects.all():
|
for img in QuestionImage.objects.all():
|
||||||
@@ -597,6 +604,7 @@ def edit_question(request, pk):
|
|||||||
else:
|
else:
|
||||||
template_name = f'library/question/question_{question_type}.html'
|
template_name = f'library/question/question_{question_type}.html'
|
||||||
context = {
|
context = {
|
||||||
|
'credits':question.credits,
|
||||||
'question': {'data': question_data}, # Wrap in data structure expected by template
|
'question': {'data': question_data}, # Wrap in data structure expected by template
|
||||||
'quiz_id': question.quiz_id.pk,
|
'quiz_id': question.quiz_id.pk,
|
||||||
'quiz': question.quiz_id,
|
'quiz': question.quiz_id,
|
||||||
|
|||||||
@@ -253,13 +253,29 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-end">
|
<div class="flex">
|
||||||
{% if quiz.credits %}
|
{% if quiz.credits %}
|
||||||
<p class="text-gray-600 mb-2">Credits:<span class="text-blue-600 font-bold overflow-auto break-words"> <a href="{{ quiz.credits }}">{{ quiz.credits }}</a></span></p>
|
<p class="text-gray-600 mb-2">Credits (Quiz): <span class="text-blue-600 font-bold overflow-auto break-words">{{ quiz.credits }}</span></p>
|
||||||
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="flex">
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
{% for question in questions %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% if question.credits %}
|
||||||
|
<li class="text-blue-600 font-bold overflow-auto break-words"> {{ question.credits }}<span class="font-medium text-gray-500"> (Frage: {{ forloop.counter }})</span> </li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -75,6 +75,12 @@
|
|||||||
<option value="120" {% if standard_time_per_question == "120" or time_per_question == "120" %}selected{% endif %}>2 Minuten</option>
|
<option value="120" {% if standard_time_per_question == "120" or time_per_question == "120" %}selected{% endif %}>2 Minuten</option>
|
||||||
<option value="300" {% if standard_time_per_question == "300" or time_per_question == "300" %}selected{% endif %}>5 Minuten</option>
|
<option value="300" {% if standard_time_per_question == "300" or time_per_question == "300" %}selected{% endif %}>5 Minuten</option>
|
||||||
</select>
|
</select>
|
||||||
|
</div>
|
||||||
|
<label for="credits" class="block text-sm font-medium text-gray-700">Credits</label>
|
||||||
|
<div class="mt-1">
|
||||||
|
<textarea name="credits" rows="4"
|
||||||
|
class="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md"
|
||||||
|
>{{ credits }}</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-end space-x-3">
|
<div class="flex justify-end space-x-3">
|
||||||
|
|||||||
@@ -115,6 +115,12 @@
|
|||||||
<option value="120" {% if standard_time_per_question == "120" or time_per_question == "120" %}selected{% endif %}>2 Minuten</option>
|
<option value="120" {% if standard_time_per_question == "120" or time_per_question == "120" %}selected{% endif %}>2 Minuten</option>
|
||||||
<option value="300" {% if standard_time_per_question == "300" or time_per_question == "300" %}selected{% endif %}>5 Minuten</option>
|
<option value="300" {% if standard_time_per_question == "300" or time_per_question == "300" %}selected{% endif %}>5 Minuten</option>
|
||||||
</select>
|
</select>
|
||||||
|
</div>
|
||||||
|
<label for="credits" class="block text-sm font-medium text-gray-700">Credits</label>
|
||||||
|
<div class="mt-1">
|
||||||
|
<textarea name="credits" rows="4"
|
||||||
|
class="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md"
|
||||||
|
>{{ credits }}</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-end space-x-3">
|
<div class="flex justify-end space-x-3">
|
||||||
|
|||||||
@@ -67,6 +67,13 @@
|
|||||||
<option value="300" {% if standard_time_per_question == "300" or time_per_question == "300" %}selected{% endif %}>5 Minuten</option>
|
<option value="300" {% if standard_time_per_question == "300" or time_per_question == "300" %}selected{% endif %}>5 Minuten</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<label for="credits" class="block text-sm font-medium text-gray-700">Credits</label>
|
||||||
|
<div class="mt-1">
|
||||||
|
<textarea name="credits" rows="4"
|
||||||
|
class="shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full sm:text-sm border-gray-300 rounded-md"
|
||||||
|
>{{ credits }}</textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="flex justify-end space-x-3">
|
<div class="flex justify-end space-x-3">
|
||||||
<a href="{% url 'library:detail_quiz' quiz.id %}"
|
<a href="{% url 'library:detail_quiz' quiz.id %}"
|
||||||
|
|||||||
Reference in New Issue
Block a user