2016-05-19 18 views
0

目標はDjango管理パネルにカスタム入力とボタンを追加することです。それは、(緑でマークされた)画像上で説明されていますDjango admin - フィールドにコントロールを追加する

enter image description here

問題は、Djangoの管理者はそのようなものを表示するためにデータベースを使用していることです。インラインコンポーネントは、残りの行にこれらのコントロールがないため、ここには適合しません。あなたは、単に番号を入力して管理者を経由して、保存ヒット、このソリューションでは

from django.contrib.auth import forms 
import datetime 

class AddDaysForm(forms.ModelForm): 
    add_extra_days_to_subscription_expiry = forms.IntegerField(required=False) 

    class Meta: 
     fields = '__all__' 

    def __init__(self, *args, **kwargs): 
     instance = kwargs.get('instance') 
     if instance: 
      self.base_fields['add_extra_days_to_subscription_expiry'] = 0 
     forms.ModelForm.__init__(self, *args, **kwargs) 

class SubscriptionAdmin(admin.ModelAdmin) 
    form = AddDaysForm 
    list_display = ('id', 'domain', 'domain_created',) 

    def save_model(self, request, obj, form, change): 
     if form.cleaned_data['add_extra_days_to_subscription_expiry'] != 0: 
      obj.subscription_expire = obj.subscription_expire + datetime.timedelta(days=form.cleaned_data['add_extra_days_to_subscription_expiry']) 
      obj.save() 

、それはあなたのためにそれを追加します。

+0

ボタンの代わりにカスタムフォームを使用する方が簡単でしょうか?私は以下の解決策を書いてみましょう。 – noahandthewhale

答えて

1

これを試してみてください。フォームがリロードされると、新しい値を入力できるように0にリセットされます。フォームがデフォルトの '0'値から保存されるときにも考慮されることに注意してください。

関連する問題