2015-03-15 4 views
1

Я определил свою модель с различными полями. Некоторые из них - это настраиваемые поля, которые я использую для проверки данных кредитной карты, используя файл fields.py моего приложения. Источник - here.Добавление настраиваемых полей в администратор Django

class Transaction(models.Model): 
    card_name = models.CharField() 
    card_number = CreditCardField(required=True) 
    security_code = VerificationValueField(required=True) 
    expiry_date = ExpiryDateField(required=True) 

Я определил ModelForm в своем файле forms.py.

class TransactionForm(forms.ModelForm): 
    class Meta: 
     model = Transaction 
     fields = "__all__" 

И я добавил форму в файл admin.py.

class TransactionAdmin(admin.ModelAdmin): 
    form = TransactionForm 

    def get_fieldsets(self, *args, **kwargs): 
     return (
      (None, { 
       'fields': ('card_name', 'card_number'), 
      }), 
     ) 
admin.site.register(Transaction, TransactionAdmin) 

Однако пользовательские поля, кажется, не отображаются на панели администрирования. Проделав тонну исследований, я нашел this, который, казалось бы, был бы решением, за исключением того, что он не работает. Я пробовал всевозможные вещи, включая добавление кортежа полей с отсутствующими полями, чтобы заставить его работать, но без кубиков. И да, я много раз искал.

Я получаю ошибку, когда после решения в последней ссылке это:

Unknown field(s) (card_number) specified for Transaction. Check fields/fieldsets/exclude attributes of class TransactionAdmin.

Запуск Django 1.7.4, Python 3.

ответ

1

Изменить модель/админ/форму, как это

class Transaction(models.Model): 
    card_name = models.CharField() 
    card_number = models.CharField(max_length=40) 
    expire_date = models.DateTimeField() 
    card_code = models.CharField(max_length=10) 

 

class TransactionForm(forms.ModelForm): 
    card_number = CreditCardField(required=True) 
    expiry_date = ExpiryDateField(required=True) 
    card_code = VerificationValueField(required=True) 
    class Meta: 
     model = Transaction 
     fields = "__all__" 

 

class TransactionAdmin(admin.ModelAdmin): 
    form = TransactionForm 

admin.site.register(Transaction, TransactionAdmin) 

UPDATE:

CreditCardField это поле формы, а не модель поля. См. Его использование в той же ссылке, которую вы опубликовали.

Эти поля будут представлены в форме.

+0

Спасибо за ответ. Кажется, я все еще получаю такую ​​же ошибку после того, как вы сказали. – user2942863

+0

См. Мой обновленный ответ. – Kedar

+0

Это смешно, потому что я на самом деле делал это раньше, но я не был уверен, что считается хорошей практикой разделить/повторить различные поля модели и сформировать их в два отдельных файла. Но я думаю, что это имеет смысл, учитывая, что поля django-creditcard на самом деле образуют поля, а не поля модели. Спасибо за разъяснение. Еще один вопрос: будут ли какие-либо свойства, которые я укажу в моделях, также наследуются полями формы? – user2942863

Смежные вопросы