Django Quiz - QR Code (Optional)
pip install qrcode

 

Having installed qrcode, it's a matter of modifying the QuizAdmin class.
We don't store the QR code in the Quiz model. Instead we keep it simple and generate it everytime we visit the Quiz through the Django Admin Quiz table.

 


from io import BytesIO
from django.utils.html import format_html

import qrcode
import base64


@admin.register(Quiz)
class QuizAdmin(admin.ModelAdmin):
    readonly_fields = ("quiz_qr_code",)

    def get_form(self, request, obj=None, **kwargs):
        self.request = request
        return super().get_form(request, obj, **kwargs)

    def quiz_qr_code(self, obj):
        if not obj.pk:
            return "Save the quiz to generate the QR code."

        domain = self.request.build_absolute_uri("/")[:-1]
        url = f"{domain}/q/{obj.uuid}/"

        qr = qrcode.make(url)
        buffer = BytesIO()
        qr.save(buffer, format="PNG")

        img_base64 = base64.b64encode(buffer.getvalue()).decode()

        return format_html(
            '<img src="data:image/png;base64,{}" style="max-width:200px;" />'
            '<br><a href="{}" target="_blank">{}</a>',
            img_base64,
            url,
            url
        )

    quiz_qr_code.short_description = "Quiz QR Code"