0
私はMyConfigオブジェクトを作成するはずの次のコードを持っています。ただし、app_modelは常にNoneとして返されます。Django ModelFormはmodeladminに外部キーを格納していません
アイデアは、いくつかのコンテンツタイプを選択してからキーを追加することです。結果として得られる設定では、一連のサービスがトリガーされます。しかし、フォームを保存するたびに、app_modelに格納されているcontenttypeは常にNoneになりますが、これは明らかに望ましくありません。
これは、ここでDjango1.8
であるadminです:
class ContentTypeModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "{}-{}".format(obj.app_label, obj.model)
class MyConfigForm(ModelForm):
class Meta:
model = models.MyConfig
fields = '__all__'
def __init__(self, *args, **kwargs):
super(MyConfigForm, self).__init__(*args, **kwargs)
self.fields['app_model'].label = "App Name"
app_model = ContentTypeModelChoiceField(
ContentType.objects.filter(
app_label__startswith='myApp',
model="myModel",
),
empty_label="Choose a model",
)
class MyConfigAdmin(admin.ModelAdmin):
model = models.MyConfig
form = MyConfigForm
list_display = (<display fields>
)
search_fields = (<search fields>
)
excluded_fields = ('app_model')
そしてここでは、モデル自身である:
class MyConfig(models.Model):
app_model = models.ForeignKey(ContentType, null=True)
ref_key = models.CharField(max_length=32, null=True)
私はセキュリティリスクについて考えると、フィールド= __all__の使用は償却されます。あなたはあなたのフォームのフィールドとしてapp_modelを定義していません。 try fields = models.MyConfig.Meta.fields + ['app_model'] – durdenk
問題ではありませんが、お試しいただきありがとうございます。 –