2013-07-26 4 views
1

다른 입력이 변경되었을 때 일부 옵션 텍스트를 기록 할 수 있도록 모델에 대해 admin.ModelAdmin에 추가 입력을 추가하려고합니다.Django ModelAdmin 모델이 아닌 추가 입력 필드

ModelFormname 'EquipmentAdmin' is not defined으로 인식 할 수 없습니다. 여러 가지 다른 방법으로 가져 오기를 시도했지만 분명히 뭔가 놓쳤음에 틀림 없다고 생각합니다. EquipmentAdminEquipmentAdminForm 사이에 순환 참조가있는 것처럼 느껴집니다. 두 참조 모두 코드에서 서로 참조를 포함하기 때문입니다.

장고 응용 프로그램 Flightdeck을 만들었으며이 파일들을 모두 같은 폴더에 저장했습니다.

models.py

from django.db import models 

class Location(models.Model): 
    name = models.CharField(max_length=45) 

class Equipment(models.Model): 
    unit_id = models.CharField(max_length=45) 
    located = models.ForeignKey(Location) 
    located_from = models.DateField() 

class EquipmentLocationHistory(models.Model): 
    unit = models.ForeignKey(Equipment) 
    located = models.ForeignKey(Location) 
    start = models.DateField() 
    end = models.DateField() 
    change_reason = models.CharField(max_length=45) 

admin.py

from django.contrib import admin 

from flightdeck.models import * 
from flightdeck.forms import EquipmentAdminForm 

class EquipmentAdmin(admin.ModelAdmin): 
    form = EquipmentAdminForm 

    def save_model(self, request, obj, form, change): 
     if 'located' in form.changed_data: 
      try: 
       old = Equipment.objects.get(unit_id=obj.unit_id) 
      except Equipment.DoesNotExist: 
       old = None 

     if old: 
      if 'located' in form.changed_data: 
       located_history = EquipmentLocationHistory(unit=obj, located=old.located, start=old.located_from, end=obj.located_from) 
       located_history.save() 

     obj.save() 

forms.py

from django import forms 
from django.contrib import admin 

class EquipmentAdminForm(forms.ModelForm): 
    reason = forms.CharField() 

    class Meta: 
     model = EquipmentAdmin 

내가 공을 포함 할 것값을 EquipmentLocationHistory을 추가했지만 EquipmentAdminForm이로드되지 않은 상태에서 테스트 할 수 없습니다.

답변

3

EquipmentAdmin는 모델이 아닙니다. 귀하의 ModelForm는 Equipment

from django import forms 
from django.contrib import admin 
from flightdeck.models import Equipment 

class EquipmentAdminForm(forms.ModelForm): 
    reason = forms.CharField() 

    class Meta: 
     model = Equipment 

PS를 참조 할 필요가있다 : 당신이 순환 참조가있을 때, 문제의 많은 방법이있다. 모델 가져 오기 및 장고를 사용하는 가장 좋은 방법은 다음과 같습니다. django.db.models.get_model('app', 'model')

관련 문제