如何在Django中生成PIN并打印多个唯一的充值PIN ?

  • 本文关键字:PIN 唯一 打印 Django python django
  • 更新时间 :
  • 英文 :


我正在一个票务项目中工作,我希望管理员能够生成多个唯一的数字pin,客户可以购买,并可以在应用程序上验证事件注册。我已经研究并意识到这也可以使用批量创建,但不知道如何。这是我的票模型

class Ticket(models.Model):
name =models.CharField(max_length=50)
price = models.PositiveIntegerField()
pin = models.CharField(max_length=6)
def __str__(self):
return self.name

我想要一个情况下,管理员将能够生成多个pin为一个特定的票点击,但不知道如何去做,所以有人应该请帮助做它的最佳方式。

您应该创建另一个与Ticket模型具有ForeignKey关系的模型TicketPIN:

from random import randint
from django.db import models
def generate_pin():
return ''.join(str(randint(0, 9)) for _ in range(6))
class TicketPIN(models.Model):
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
value = models.CharField(max_length=6, default=generate_pin, blank=True)
class Meta:
unique_together = ["ticket", "value"]
def __str__(self):
return f"{self.ticket} | {self.value}"

Ticket模型中不需要pin字段。接下来,您应该创建一个只有超级用户才能访问的视图:

from django.http import JsonResponse
from .models import Ticket, TicketPIN
def generate_pins_for_ticket(request, ticket_id):
if request.user.is_superuser:
ticket = Ticket.objects.get(id=ticket_id)
for _ in range(20):
TicketPIN.objects.create(ticket=ticket)
return JsonResponse({"message": f"Created 20 PINs successfully for {ticket} ticket."})
return JsonResponse({"error": "Not Authorized"})

urls.py:

from django.urls import path
from .views import generate_pins_for_ticket 
urlpatterns = [
path("generate-pins/<int:ticket_id>", generate_pins_for_ticket),
]

假设管理员创建了一个包含id=1的票据,当管理员注销时,任何访问/generate-pins/1的用户都将看到响应{"error": "Not Authorized"}。只有管理员登录并访问/generate-pins/1才会生成20个pin。您可以修改视图以接受任何数字来生成和创建表单,从而使其对管理员友好。

这是评论,但由于我的声誉没有达到50,所以我添加了这个:

如果我理解你的话,你想当用户提交票证票证的模型将在admin中自动生成一个随机数。

可以使用Python模块Random或Django模块Django Signals

<<p>

Django信号/strong>Django包含了一个"信号分派器",它可以帮助解耦的应用程序在框架的其他地方发生动作时得到通知。简而言之,信号允许特定的发送者通知一组接收者某些动作已经发生。当许多代码段可能对相同的事件感兴趣时,它们特别有用。

Python模块Random

该模块实现了各种发行版的伪随机数生成器。

对于整数,从范围中进行统一选择。对于序列,有一个随机元素的均匀选择,一个对列表进行就地随机排列的函数,以及一个不进行替换的随机抽样函数。

最新更新