Генерировать qr-код и при сканировании отображать url-данные в django
здесь при добавлении элемента нужно автоматически генерировать qrcode и при сканировании камерой мобильного телефона показывать url данные
Python version = 2.7
Django version = 1.8
qrcode version = 6.0
рассмотрим мой models.py как
def qr_code_file_name(instance, filename):
return '%s/qr_codes/%s/' % (instance.client_id, filename)
class StockItems(models.Model):
item_name = models.CharField(max_length=512)
qr_code = models.ImageField(upload_to=qr_code_file_name, blank=True, null=True)
def __unicode__(self):
return self.item_name
def save(self, *args, **kwargs):
qrcode_img = qrcode.make(self.item_name)
canvas = Image.new('RGB',(90,90),'white')
draw = ImageDraw.Draw(canvas)
canvas.paste(qrcode_img)
fname = File('qrcode-code1.png')
buffer = BytesIO()
canvas.save(buffer,'PNG')
self.qr_code.save(fname,File(buffer),save=False)
canvas.close()
Когда я пытаюсь сохранить созданный новый элемент и автоматически сохранить qr_code, я получаю ошибку
Вот моя трассировка ошибки
Traceback (most recent call last):
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/home/andrew/devel/projectscan/mcam/server/mcam/core/views.py", line 516, in dispatch
return super(CustomAuthMixin, self).dispatch(request, *args, **kwargs)
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/braces/views/_access.py", line 102, in dispatch
request, *args, **kwargs)
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/views/generic/base.py", line 89, in dispatch
return handler(request, *args, **kwargs)
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 249, in post
return super(BaseCreateView, self).post(request, *args, **kwargs)
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 215, in post
return self.form_valid(form)
File "/home/andrew/devel/projectscan/mcam/server/mcam/crm/views.py", line 6225, in form_valid
self.object.save()
File "/home/andrew/devel/projectscan/mcam/server/mcam/crm/models.py", line 2980, in save
self.qr_code.save(fname,File(buffer),save=False)
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/db/models/fields/files.py", line 107, in save
self._size = content.size
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/core/files/base.py", line 59, in _get_size
self._size = self._get_size_from_underlying_file()
File "/home/andrew/.virtualenvs/projectscan/local/lib/python2.7/site-packages/django/core/files/base.py", line 49, in _get_size_from_underlying_file
pos = self.file.tell()
ValueError: I/O operation on closed file.
Пожалуйста, помогите мне, как я могу решить эту ошибку и сохранить мой qr_код в базе данных, а при сканировании с помощью камеры мобильного телефона он должен перенаправлять на следующий url
url(r'^jobs/items_detail_view_2/(?P<pk>\d+)$', item_detail_view_2, name="item_detail_view_2"),
Для этого нам нужно сохранить url в qr-коде пример https://dev.projectscan.com/