Python Django ModelAdmin额外输入字段不是来自模型

Python Django ModelAdmin额外输入字段不是来自模型,python,django,Python,Django,我正在尝试为我拥有的模型向admin.ModelAdmin添加一个额外的输入,以便在另一个输入发生更改时记录一些可选文本 我无法将自定义的模型形式识别为名称“EquipmentAdmin”未定义。我尝试过几种不同的导入方式,但我想我一定错过了一些明显的东西。感觉在EquipmentAdmin和EquipmentAdminForm之间有一个循环引用,因为它们都在代码中包含对彼此的引用 我已经创建了我的Django应用程序Flightdeck,并将它们都放在同一个文件夹中 型号.py from dj

我正在尝试为我拥有的模型向
admin.ModelAdmin
添加一个额外的输入,以便在另一个输入发生更改时记录一些可选文本

我无法将自定义的
模型形式
识别为
名称“EquipmentAdmin”未定义
。我尝试过几种不同的导入方式,但我想我一定错过了一些明显的东西。感觉在
EquipmentAdmin
EquipmentAdminForm
之间有一个循环引用,因为它们都在代码中包含对彼此的引用

我已经创建了我的Django应用程序
Flightdeck
,并将它们都放在同一个文件夹中

型号.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)
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()
from django import forms
from django.contrib import admin

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

    class Meta:
        model = EquipmentAdmin
admin.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)
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()
from django import forms
from django.contrib import admin

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

    class Meta:
        model = EquipmentAdmin
forms.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)
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()
from django import forms
from django.contrib import admin

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

    class Meta:
        model = EquipmentAdmin

我想在添加
EquipmentLocationHistory
时包含
reason
值,但由于未加载
EquipmentAdminForm
,因此无法测试我拥有的内容。

EquipmentAdmin
不是模型。您的模型需要参考
设备

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')