2012-03-05 6 views
0

私はClientPaymentOptionsという2つのモデルを持っています。私のadmin.pyでdjango管理者にメソッドを入れる方法は?

class Client(models.Model): 
    name = models.CharField(max_length=50, null=True, unique=False) 
    contact = models.CharField(max_length=50, null=True, unique=False) 
    address = models.CharField(max_length=300, null=True, unique=False) 

class ClientPaymentOption(models.Model): 
    name = models.CharField(max_length=30, null=True, unique=False, choices=CARD_TYPE) 
    action = models.CharField(max_length=30, null=True, unique=False, choices=CLIENT_PAYMENT_OPTION) 
    percent = models.FloatField(max_length=10, null=True, unique=False) 
    fixamount = models.FloatField(max_length=20, null=True, unique=False) 
    itemcharged = models.CharField(max_length=10, null=True, unique=False) 

私はこれを持っている:

admin.site.disable_action('delete_selected') 
class ClientAdmin(admin.ModelAdmin): 
    #display list 
    list_display = ('name','contact','address') 
    #display fields 
    fields = ('name','contact','address') 
    pass 
admin.site.register(Client, ClientAdmin) 

class PaymentOptionAdmin(admin.ModelAdmin): 
    list_display = ('name', 'action', 'percent', 'fixamount', 'itemcharged', 'client') 
    fields = ('name', 'action','percent', 'fixamount', 'itemcharged', 'client') 
admin.site.register(ClientPaymentOption, ClientPaymentOptionAdmin) 

それは私がdjango adminで新しいClientを作成するたびに、それはまた、自動的にそれがClientPaymentOptionをだ作成することが可能ですか?

は、私は私のadmin.pyでこれをやろう:

class ClientAdmin(admin.ModelAdmin): 
    #display list 
    list_display = ('name','b_type','banner','logo', 
        'contact','address','account_type', 
        'status','currency','color','user', 
        ) 
    #display fields 
    fields = ('name','b_type','banner','logo','contact', 
       'address','account_type','status', 
       'currency','color','user', 
      ) 
    pass 
    def save_model(self, request, obj, form, change): 
     ClientPaymentOption.objects.create(name='MasterCard',action='% Charged', client=obj.id, percent=0.10) 
     ClientPaymentOption.objects.create(name='Visa', action='% Charged',client=obj.id, percent=0.10) 

が、私はこのエラーを得た:私はprintパラメータにしようとしたとき、私は気づいた

ValueError at /admin/client_app/client/add/ 
Cannot assign None: "ClientPaymentOption.client" does not allow null values. 

をそのまだクライアント保存されません...

print obj.id 
None 

誰かが私の場合についてのアイデアや提案を持っていますか?事前に

おかげで...

+1

https://docs.djangoproject.com/en/dev/ref/signals/#post-syncdb 'post_syncdb'はあなたが探しているものです。これは、 'User'が作成されるたびに' UserProfile'の自動作成を記述するためにドキュメントが使用するのと同じパターンです。 –

答えて

1

は、新しいオブジェクトを作成しようとする前に、親のメソッドを呼び出します。

関連する問題