2012-03-05 6 views
0

두 모델, ClientPaymentOptions이 있습니다. 내 admin.py에서장고 관리자에 메서드를 넣는 방법?

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

새 개체를 만들기 전에 부모 메서드를 호출하십시오.

관련 문제