2012-03-05 4 views
0

私はこのコードを使用してサインアップするとサービスを無料で10ドル手渡すクーポンジェネレータを作成しています。ユーザーベースは非常に小さく、一度に10個以上のクーポンを渡す可能性は低いです。Django Admin:TabularInlineのランダムキーで、ランダムではありません

新しいマーケティングキャンペーンを作成する場合、管理者にはTabularInlineに5つのクーポンが与えられ、[別のクーポンを追加]ボタンでさらに作成するオプションが表示されます。しかし、クーポン6以上はすべてクーポン5と全く同じランダムコードを持っています。 Djangoは実際にサーバから新しいサンプルオブジェクトを要求していないのですが、最後に見たものを複製するだけです。

これを実行するコードは次のとおりです。generate_code()が良く、ランダムな文字列を生成し、機能である

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) 

。 Djangoの管理者はdefaultのフィールドクラスの設定を尊重しなければならないと思います。最初のnが管理者側によって生成されましたが、クライアント要求によって構築されたものは生成されません。

Djangoにサーバー上のオブジェクトを作成させて取得させる方法はありますか?インラインでコードを作成するために自分のページをハックする必要がありますか?それとももっとスマートな方法がありますか?

+0

ランダムクーポンのようなサウンドは、Djangoが書いたカスタムコードによって作成されます。なぜこれをインラインで使うのですか?ランダム生成クーポン以外の他の機能はありますか?たぶん、新しく生成されたクーポンを作成して表示する、カスタムビルドajax関数を作成することを検討する必要があります。 –

+0

@ dan-klasson:質問を更新して内訳を表示しました。 Djangoの管理者は、 'models.Field'の' default'引数を正しく守っていません。私はここで何か間違っているかどうかを判断しようとしています。 –

答えて

1

djangoインラインで "別のリンクを追加"リンクはクライアントサイドのJavaScriptです。それはおそらく最後に生成された値を取る理由です。ランダムなサーバー側の文字列を返す場合は、それをオーバーライドして独自のajax関数を実装する必要があります。また、JavaScriptを使用してクライアント側を生成することもできます。

+0

まあ、吸う。これはDjangoの厄介なブレークポイントです。プログラム上のデフォルトを守らなければなりません。 –