Django rest框架:如何创建一个自定义的、自动生成的字符串字段



我正在为应用程序使用通用的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。有创建日期总是很好的,以满足未来的需求。

最新更新