2012-03-05 47 views
0

我正在創建一個優惠券發生器,用於發放「如果使用此代碼註冊,可免費獲得10美元的服務」。用戶基數非常小,並且不太可能一次傳出十個以上的優惠券。Django管理:TabularInline中的隨機密鑰重複,而不是隨機

創建新的營銷活動時,管理員會在TabularInline中獲得五張優惠券,並可通過「添加其他優惠券」按鈕創建更多優惠券。但是優惠券6和更高優惠券全都具有與優惠券5完全相同的隨機碼;它看起來好像Django實際上並不是從服務器請求一個新的示例對象,而是複製了它看到的最後一個對象。

的代碼要做到這一點:

class Coupon(models.Model): 
    campaign = models.ForeignKey(Campaign) 
    code = models.CharField(max_length = 32, blank=False, null=False, default=generate_code) 
    redeemed_by = models.ForeignKey(User, null = True, blank = True) 

generate_code()是一個功能,那麼,生成一個隨機字符串。在我看來,Django的管理員應該遵守其自己的Field類的default設置,並且它對於由管理服務器端生成的第一個,而不是由客戶端請求生成的第一個。

有沒有辦法讓Django在服務器上創建對象並獲取它們?我是否必須破解自己的頁面才能創建內聯代碼?還是有更聰明的方法去解決這個問題?

+0

這些隨機優惠券的聲音是由您自己編寫的而不是由Django編寫的自定義代碼創建的。爲什麼要使用內聯?除隨機生成的優惠券之外是否還有其他功能?也許你應該考慮創建一個自定義的ajax函數來創建並顯示新生成的優惠券。 – 2012-03-05 19:49:24

+0

@ dan-klasson:我更新了問題以顯示故障。 Django的管理員不正確地遵守'models.Field'的'default'參數。我試圖弄清楚我在這裏做錯了什麼。 – 2012-03-05 19:56:46

回答

1

django內聯中的「添加另一個」鏈接是客戶端JavaScript。這可能是爲什麼它需要最後生成的值。如果你想要它返回一個隨機的服務器端字符串,你將不得不重寫它並實現你自己的ajax函數。你也可以用javascript生成它的客戶端。

+0

好吧,吸。在Django中這是一個令人討厭的突破點 - 程序化的默認值應該得到尊重。 – 2012-03-05 21:35:57