2016-09-28 6 views
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) 
+0

私はセキュリティリスクについて考えると、フィールド= __all__の使用は償却されます。あなたはあなたのフォームのフィールドとしてapp_modelを定義していません。 try fields = models.MyConfig.Meta.fields + ['app_model'] – durdenk

+0

問題ではありませんが、お試しいただきありがとうございます。 –

答えて

0

は残念ながらやや私の足の間に私の尾を持つために。欠落しているコードは、を含むexcluded_fieldsでした。私はこれが表示されたフィールドからそれを削除したと思ったが、実際に保存時にモデルに保存したデータからそれを削除する。

これを検討した皆様に感謝します。多くの謝罪。

関連する問題