在Django應用我需要創建一個順序號,它看起來像:yyyymmddnnnn其中YYYY =年,mm =月,dd =日期和nnnn是1到9999Django中,訪問的PostgreSQL序列
之間的數我想我可以使用PostgreSQL序列,因爲生成的數字是原子的,所以我可以確定何時該進程獲得的數字是唯一的。
所以我創建了一個PostgreSQL的序列:
CREATE SEQUENCE order_number_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9999
START 1
CACHE 1
CYCLE;
該序列可作爲具有一排表進行訪問。所以在checkout.py文件中,我創建了一個Django模型來訪問這個序列。
class OrderNumberSeq(models.Model):
"""
This class maps to OrderNumberSeq which is a PostgreSQL sequence.
This sequence runs from 1 to 9999 after which it restarts (cycles) at 1.
A sequence is basically a special single row table.
"""
sequence_name = models.CharField(max_length=128, primary_key=True)
last_value = models.IntegerField()
increment_by = models.IntegerField()
max_value = models.IntegerField()
min_value = models.IntegerField()
cache_value = models.IntegerField()
log_cnt = models.IntegerField()
is_cycled = models.BooleanField()
is_called = models.BooleanField()
class Meta:
db_table = u'order_number_seq'
我將sequence_name設置爲主鍵,因爲Django堅持在表中具有主鍵。
的我創建了內容的文件get_order_number.py:
def get_new_order_number():
order_number = OrderNumberSeq.objects.raw("select sequence_name, nextval('order_number_seq') from order_number_seq")[0]
today = datetime.date.today()
year = u'%4s' % today.year
month = u'%02i' % today.month
day = u'%02i' % today.day
new_number = u'%04i' % order_number.nextval
return year+month+day+new_number
現在,當我打電話從它的行爲與預期Django的交互shell「get_new_order_number()」。
>>> checkout.order_number.get_new_order_number()
u'201007310047'
>>> checkout.order_number.get_new_order_number()
u'201007310048'
>>> checkout.order_number.get_new_order_number()
u'201007310049'
每次調用該函數時,都會看到數字很好地遞增1。您可以啓動多個交互式Django會話,並且數字很好地增加,不同會話中出現的數字不會相同。
現在我嘗試使用從視圖中調用這個函數如下:
import get_order_number
order_number = get_order_number.get_new_order_number()
,它給了我一個號碼。然而,當我下次訪問視圖時,它將數字加2。我不知道問題出在哪裏。
我認爲我們需要從您的視圖代碼中看到更多。 – KillianDS 2010-08-01 08:29:50
基本上沒有更多的視圖代碼。但我已經改變了我的想法如何生成訂單號碼。我需要生成唯一的訂單號碼,以便在必要時跟蹤訂單。而我嘗試的方式有一個嚴重的缺點。我必須在正午的時候每天重置櫃檯。無論如何,所有你們都感謝迴應。 – Henri 2010-08-01 20:04:16
看來錯誤出現在應用程序的另一部分,所以問題解決了。我讀了一些關於生成訂單號的地方:http://stackoverflow.com/questions/1179439/best-way-to-generate-order-numbers-for-an-online-store,這裏有一些非常有用的提示。 – Henri 2010-08-02 22:46:43