我需要一些建议...
在我的 django 应用程序中,我有模型:订单和订单状态:
class OrderStatus(models.Model):
status = models.CharField(max_length=20, verbose_name="Status")
class Order(models.Model):
orderNo = models.CharField(max_length=20, verbose_name="Order", unique=True)
orderStatus = models.ForeignKey(OrderStatus, on_delete=models.PROTECT, verbose_name="Status" )
有 3 种状态..:新的、进行中、已完成...
在我看来,我经常使用如下代码:(例如创建订单)
orderx = Order()
orderStatus1 = OrderStatus.objects.get(pk=1) # <- the problem is here...
orderx.orderStatus=orderStatus1
orderx.orderNo=i
orderx.save()
我遇到的问题是:
那么应该如何建模,以便我可以以某种方式获取 STATUS_NEW ?
您可以使用
is_default
[Django-doc]:向
OrderStatus
添加“标志”UniqueConstraint
,保证仅适用于 one 记录
from django.db.models import Q
class OrderStatus(models.Model):
status = models.CharField(max_length=20, unique=True, verbose_name='Status')
is_default = models.BooleanField(db_index=True)
class Meta:
constraints = [
models.UniqueConstraint(
fields=('is_default',),
condition=Q(is_default=True),
name='one_default_stats',
)
]
然后您可以使用以下命令创建订单:
orderx = Order.objects.create(
orderStatus=OrderStatus.objects.get(is_default=True), orderNo=i
)
我们不能保证至少有一条这样的记录。如果找不到,我们可以使用
NULL
/None
来代替。