我正在为应用程序使用通用的Django Rest Framework类,但我希望能够在创建新订单实例时自动生成一个简短的客户订单ID。
泛型类非常棒,但小的调整可能会很快变得一团糟。我想知道是否有一种方法可以按照AutoIncrement
之类的类的精神,或者按照主键整数的创建方式(但不是作为主键(,在models.py
中进行自动生成。
假设我有一个模型
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
details = models.CharField(null=True, max_length=200)
@property
def title(self):
return f"{self.user.first_name}'s, order"
我想添加一个新字段order_reference
。比方说,我想添加一些自定义逻辑,比如
@before_createish_thing
def order_reference(self):
# Return something like XYZ2021-000-23
return f"XYZ-{datetime.now().year}-000-{self.order_id}"
某个地方。
我不认为有任何类似before_create
装饰器的东西与@property
装饰器一样?
我的观点和一样简单
class OrderList(generics.ListCreateAPIView):
queryset = Order.objects.all()
serializer_class = OrderSerializer
因此,我不愿意为了得到create()
方法而把它拆开。
有没有什么方法可以做到这一点,最好是将逻辑放在模型文件中?
您可以简单地执行以下操作:
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
details = models.CharField(null=True, max_length=200)
creation_date = models.DateField(auto_now_add=True)
@property
def title(self):
return f"{self.user.first_name}'s, order"
@property
def order_reference(self):
return f"XYZ-{self.creation_date.year}-000-{self.order_id}"
此外,存储日期可以让您稍后更改order_reference属性,并可以访问日、月、年。或者甚至使用DatetimeField。有创建日期总是很好的,以满足未来的需求。