2012-03-05 48 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