2013-07-26 28 views
1

我试图给admin.ModelAdmin增加一个额外的输入,因为我有一个模型,所以我可以在另一个输入发生变化时记录一些可选文本。Django ModelAdmin额外输入字段不是来自型号

我无法获得自定义ModelForm认定为name 'EquipmentAdmin' is not defined。我尝试了几种不同的导入方式,但我认为我一定错过了一些明显的东西。感觉好像在EquipmentAdminEquipmentAdminForm之间有一个循环引用,因为它们在代码中都包含对彼此的引用。

我创建了我的Django应用程序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 

我想包括reason值,当我添加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的最佳方式是使用django.db.models.get_model('app', 'model')

相关问题