admin.ModelAdmin
別の入力が変更されたときにオプションのテキストを記録できるように、モデルの に追加の入力を追加しようとしています。
ModelForm
カスタムが として認識されませんname 'EquipmentAdmin' is not defined
。いくつかの異なるインポート方法を試しましたが、何か明らかなことを見逃していたに違いないと思います。EquipmentAdmin
との間に循環参照があるように感じEquipmentAdminForm
ます。どちらもコード内で相互参照を含んでいるためです。
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()
フォーム.py
from django import forms
from django.contrib import admin
class EquipmentAdminForm(forms.ModelForm):
reason = forms.CharField()
class Meta:
model = EquipmentAdmin
reason
を追加するときに値を含めたいのですが、ロードされていないEquipmentLocationHistory
ため、持っているものをテストできません。EquipmentAdminForm