Hello there, In this article, I will share how to generate or use Django QR-Code easily. I think you already set up the Django project in your local development server.
$ pip install pillow qrcode
First, install the package in your project then let’s go to the app's models.py file.
from django.db import modelsclass QRCode(models.Model):
name = models.CharField(max_length=100)
qr_image = models.ImageField(blank=True, null=True, upload_to='QRCode')
def __str__(self):
return self.name
Here, we created the QUCode`
a model which has two fields name and qr_image field. That’s mean it is like a basic Django model nothing new. :-)
import qrcode
from io import BytesIO
from django.core.files import File
from PIL import Image, ImageDrawdef save(self, *args, **kwargs):
qr_image = qrcode.make(self.name)
qr_offset = Image.new('RGB', (310, 310), 'white')
draw_img = ImageDraw.Draw(qr_offset)
qr_offset.paste(qr_image)
file_name = f'{self.name}-{self.id}qr.png'
stream = BytesIO()
qr_offset.save(stream, 'PNG')
self.qr_image.save(file_name, File(stream), save=False)
qr_offset.close()
super().save(*args, **kwargs)
Now, at first, we create a save method into the QUCode
model, and also the installed library/package imports some classes, methods, or something like this. Here, when the save method call automatically generates a QR code for your system. Basically, the above method is called to generate the QR-code.
admin.py
file:
from .models import QRCode
Here is the full code:
import qrcode
from io import BytesIO
from django.core.files import File
from PIL import Image, ImageDraw
from django.db import models
class QRCode(models.Model):
name = models.CharField(max_length=100)
qr_image = models.ImageField(blank=True, null=True, upload_to='QRCode')
def __str__(self):
return self.name
# save method
def save(self, *args, **kwargs):
qr_image = qrcode.make(self.name)
qr_offset = Image.new('RGB', (310, 310), 'white')
draw_img = ImageDraw.Draw(qr_offset)
qr_offset.paste(qr_image)
file_name = f'{self.name}-{self.id}qr.png'
stream = BytesIO()
qr_offset.save(stream, 'PNG')
self.qr_image.save(file_name, File(stream), save=False)
qr_offset.close()
super().save(*args, **kwargs)
N:B: First only you have to save name not upload
qr_image
that’s meanqr_image
the field will be saved as a blank field. Then when you again click the name field from the Django admin panel you will get the QRCode image.