2011-02-03 5 views
3

첨부 된 트랜잭션이 포함 된 장고 데이터베이스가 있습니다. 관리 인터페이스에서 각 도서 페이지에 각 도서에 첨부 된 거래를 보여 드리고자합니다.Django admin StackedInline 사용자 정의

이상적으로 트랜잭션을 추가하거나 삭제할 수 없으므로 읽기 전용이어야합니다. 모델 필드 중 일부만 보여주고 싶습니다. 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',) 

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) 만 표시하고 다른 필드를 숨기려면 어떻게해야합니까?

또한 헤더는 현재 "도서 이력 - 거래 : 거래 객체"입니다. '거래 객체'보다 친숙한 것을 어떻게 표시 할 수 있습니까?

별도의 질문으로 나눠서 알려주십시오.

감사합니다.

+0

다이빙을 __unicode__ 메소드를 오버라이드 (override) : 또한 fields 속성 http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fields

을 지정할 수 : 0
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets-max-num

2 max_num 설정 "Add another"는 jQuery django formset 툴킷의 기능으로 보이며 쉽게 닫히지 않습니다. 이 항목을 사용자 정의 표시 테이블로 만들려면 $ {TEMPLATE_ROOT} /admin/APPNAME/MODELNAME/change_form.html을 작성하고 "admin/change_form.html"을 확장 한 다음 인라인 객체 블록을 재정의하십시오. –

+0

max_num을 0으로 설정하면 처리됩니다. –

답변