как поставить методы в админке Django? - PullRequest
0 голосов
/ 05 марта 2012

У меня есть две модели, Client и PaymentOptions.

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.py У меня есть это:

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)

возможно ли, что когда я создаюновый Client в django admin он также автоматически создаст свой 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)

, но я получил эту ошибку:

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

, когда я пытаюсь print параметрыЯ заметил, что Клиент все еще не сохранен ...

print obj.id
None

У кого-нибудь есть идея или предложение по моему делу?

заранее спасибо ...

1 Ответ

1 голос
/ 05 марта 2012

Вызовите метод родителя, прежде чем пытаться создать новые объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...