Изменить общий ярлык встроенного администратора - PullRequest
3 голосов
/ 07 сентября 2011

Я следующее в models.py:

class Item(models.Model):
    date = models.DateField(_('date'), blank=True, null=True)
    description = models.CharField(_('description'), max_length=255)

    content_type = models.ForeignKey(ContentType, verbose_name=_('content type'))
    object_id = models.PositiveIntegerField(_('object id'), db_index=True)
    object = generic.GenericForeignKey('content_type', 'object_id')

class ItemAccountAmountRef(Item):
    """ Items of which a Quote or an Invoice exists. """
    amount = models.DecimalField(max_digits=10, decimal_places=2)
    reference = models.CharField(max_length=200)
    debit_account = models.ForeignKey(Account, related_name='receivables_receipt_debit_account')
    credit_account = models.ForeignKey(Account, related_name='receivables_receipt_credit_account')

class PaymentItem(ItemAccountAmountRef):
    pass

class Payment(models.Model):
    invoice = models.ManyToManyField(Invoice, null=True, blank=True)
    date = models.DateField('date')
    attachments = generic.GenericRelation(Attachment)
    site = models.ForeignKey(Site, related_name='payment_site', null=True, blank=True
    items = generic.GenericRelation(PaymentItem)

в admin.py:

class PaymentItemInline(generic.GenericTabularInline):
    model = PaymentItem
    form = PaymentItemForm

class PaymentAdmin(admin.ModelAdmin):
    inlines = [PaymentItemInline]

в forms.py:

class PaymentItemForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(PaymentItemForm, self).__init__(*args, **kwargs)
        self.fields['credit_account'].label = "Bank Account"

В PaymentItemInline метка не меняется.Я попытался изменить другие атрибуты, например, класс, который работает.Если я запускаю init в режиме отладки, я вижу, что переменная метки изменяется, однако, когда форма отображается, поле все еще помечено как кредитный счет.Есть предложения?

1 Ответ

2 голосов
/ 21 сентября 2011

Ты на 98% пути. Вместо того, чтобы пытаться возиться с полем формы в __init__, просто переопределите его в вашем ModelForm. Если вы назовете его так же, django сможет выяснить, что он должен проверить и сохранить в поле ForeignKey. Вы можете использовать ту же формулу, чтобы полностью изменить поле или виджет для данного поля в ModelForm.

Типы полей формы по умолчанию для каждого типа поля модели можно найти здесь: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#field-types

class PaymentItemForm(forms.ModelForm):
    credit_account = forms.ModelChoiceField(label="Bank Account", queryset=Account.objects.all())

Вот и все. Нет необходимости переопределять какие-либо функции вообще:)

Кстати, документы для этого поля находятся здесь: https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield

...