Если честно, я не думаю, что это должно работать, когда вы создаете несколько экземпляров.Потому что, как я вижу из кода:
if self.purchase_order_id is not None:
self.purchase_order_number = "PO"+str(self.purchase_order_id)
Здесь purchase_order_id
будет None
при создании нового экземпляра.Кроме того, пока вы не вызовете super(PurchaseOrder, self).save()
, он не будет генерировать purchase_order_id
, что означает, что purchase_order_number
будет пустым.
Итак, я бы порекомендовал не хранить эту информацию в БД.Он в основном такой же, как purchase_order_id
с PO
перед ним.Вместо этого вы можете использовать метод свойства, чтобы получить то же значение.Например:
class PurchaseOrder(models.Model):
purchase_order_id = models.AutoField(primary_key=True)
# need to remove `purchase_order_number = models.CharField(unique=True)`
...
@property
def purchase_order_number(self):
return "PO{}".format(self.purchase_order_id)
Итак, вы также можете увидеть purchase_order_number
примерно так:
p = PurchaseOrder.objects.first()
p.purchase_order_number
Недостатком этого решения является то, что вы не можете сделать запрос в поле свойства.Но я не думаю, что это было бы необходимо в любом случае, потому что вы можете сделать тот же запрос для purchase_order_id
, то есть PurchaseOrder.objects.filter(purchase_order_id=1)
.