4

前もって感謝します。Django でモデルを作成しました。このモデルには、タイトル、URL、および順序付けフィールドがあります。これで、注文フィールドのデフォルト値を に設定しましたZERO。私の要件は、このデフォルト値を に変更する必要があることcurrent highest Ordering number + 1です。管理者インターフェースでそれを行うにはどうすればよいですか?

class FooterLinks(models.Model):
    title = models.CharField(_("Title"), max_length=200, null = True, blank = True)
    link = models.CharField(_("Link"), max_length = 200)
    order = models.IntegerField(_("Sort Order"), default=0)
4

2 に答える 2

2
from django.db.models import Max
new_default = FooterLinks.objects.all().aggregate(Max('order'))['order__max']+1
FooterLinks.objects.filter(order=0).update(order=new_default)

変更を永続的にするには、South でデータベースの移行を行います。またはdanihpが提案したように、saveメソッドをオーバーライドします。

ただし、テーブルが非常に大きくなる場合は、このロジックをデータベースのトリガーとして実装することをお勧めします。

編集:

いいえ、これを 1 回実行すると、データベース内のすべてのエントリが更新されます。理想的には、通常のシステム ダウンタイム/メンテナンス期間中にこれを実行します。

テキスト ボックスの値を調整するには、モデルに指定したデフォルトを更新する必要があります。値または呼び出し可能オブジェクト(つまり、メソッド)defaultを取ることができることに注意してください。フィールドがレンダリングされるたびに、メソッドが呼び出されます。

これを使用して、メソッドをデフォルトとして提供することにより、デフォルトが常に計算されるようにすることができます。

于 2012-08-26T09:35:02.440 に答える