Настройка администратора Django StackedInline

У меня есть база данных книг Django с прикрепленными транзакциями. В интерфейсе администратора на каждой странице книги я хотел бы показать транзакции, прикрепленные к каждой книге.

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

In models.py:

class Book(models.Model):
    title = models.CharField(max_length=400)
class Transaction(models.Model):
    id = models.IntegerField(primary_key=True)
    book = models.ForeignKey(Book)
    user = models.ForeignKey(User)
    transaction_type = models.IntegerField(choices=TRANSACTION_TYPES)
    ipaddress = models.IPAddressField(null=True, blank=True)
    transaction_date = models.DateTimeField()
    date_added = models.DateTimeField(auto_now_add=True) 
    class Meta:
        get_latest_by = 'transaction_date'
        ordering = ('-transaction_date',)

In admin.py:

class TransactionInline(admin.StackedInline):
    model = Transaction
    readonly_fields = ['user', 'transaction_type', 'transaction_date']
    verbose_name = 'Transaction'
    verbose_name_plural = 'Book history'
class BookAdmin(admin.ModelAdmin):
    fieldsets = [ (None, {'fields': ['title'}) ]
    inlines = [ TransactionInline, ]

У меня есть несколько вопросов, и все они связаны с тем фактом, что транзакции концептуально доступны только для чтения.

  1. Как я могу отключить ссылку «добавить новую» для транзакций?
  2. Как я могу показать только те поля, которые меня интересуют — user, transaction_type и transaction_date — и скрыть остальные?

Кроме того: заголовок в настоящее время «История книги — Транзакция: объект транзакции». Как я могу показать что-то более дружелюбное, чем «Объект транзакции»?

Пожалуйста, дайте мне знать, если это должно быть разделено на отдельные вопросы!

Спасибо.


person AP257    schedule 03.02.2011    source источник
comment
Погружаясь в исходный код, кажется, что «Добавить другое» является функцией набора инструментов jQuery django formset, и ее нелегко отклонить. Если вы хотите, чтобы это была настраиваемая отображаемая таблица, почему бы не создать ${TEMPLATE_ROOT}/admin/APPNAME/MODELNAME/change_form.html, расширить admin/change_form.html, а затем переопределить блок встроенных объектов?   -  person Elf Sternberg    schedule 04.02.2011
comment
установка max_num на 0 позаботится об этом.   -  person Yuji 'Tomita' Tomita    schedule 04.02.2011


Ответы (1)


1: установите для max_num значение 0
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets-max-num

2: укажите атрибут fields http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fields

Также: переопределите метод __unicode__ в своей модели
http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.Unicode

person Yuji 'Tomita' Tomita    schedule 03.02.2011