Как автоматически генерировать qr-код при добавлении элементов в Django
здесь я хочу автоматически генерировать уникальный qr-код для каждого товара, когда товары создаются в Django
вот мой models.py
def qr_code_file_name(instance, filename):
char_set = string.ascii_uppercase + string.digits
dat = ''.join(random.sample(char_set*6, 12))
return 'qrimage/' + str(instance.client_id) + '/' + dat + '_' + re.sub(r'[^a-zA-Z0-9-_.]', r'_', filename);
class Items(models.Model):
client = models.ForeignKey("core.Client", related_name="job_items")
item_name = models.CharField(max_length=512)
cost_price = models.DecimalField(null=True, max_digits=10, decimal_places=2, default=0.00, verbose_name='Purchase price')
common_name = models.CharField(max_length=512, blank=True, null=True)
qr_code = models.ImageField(upload_to=qr_code_file_name, blank=True, null=True)
Вот мой forms.py
class JobItemForm(BetterModelForm):
def __init__(self, *args, **kwargs):
self.client = kwargs.get("initial", {}).get("client")
super(JobItemForm, self).__init__(*args, **kwargs)
client = kwargs.get("initial", {}).get("client")
.....
.....
def clean(self):
cleaned_data = super(JobItemForm, self).clean()
client = self.client
pk = self.instance.pk
name = cleaned_data.get('item_name')
if pk is None:
same_items = Items.objects.filter(
item_name=name, client_id=client)
if same_items.exists():
raise forms.ValidationError('The item with same name and part number already exists.')
return cleaned_data
class Meta:
model = Items
exclude = ('client')
fields = ('item_name','common_name','cost_price','qr_code')
Вот мой views.py
class JobItemCreateView(CustomAuthMixin, CreateView):
model = Items
form_class = JobItemForm
context_object_name = "type"
template_name = "jobs/jobitem_form.django.html"
def get_initial(self):
initial = super(JobItemCreateView, self).get_initial()
initial['client'] = self.request.user.client
initial['created_by'] = self.request.user
return initial
def form_valid(self, form):
client = self.request.user.client
self.object = form.save(commit=False)
self.object.client = self.request.user.client
with transaction.atomic():
self.object.save()
messages.success(self.request, 'Item successfuly created.')
return redirect(self.get_success_url())
def get_success_url(self):
path = self.request.path
if path == '/items/jobs/addjob/items/':
return reverse_lazy("job form")
else:
return reverse("items:item list")
Теперь, используя эти данные, пожалуйста, помогите мне автоматически генерировать уникальный qr-код при добавлении и сохранении элементов в модели в django, в настоящее время моя версия django 1.8