2016-09-28 50 views
0

我有下面的代碼應該創建一個MyConfig對象。但是,它並不像app_model總是以None返回。Django ModelForm沒有存儲foreignkey in modeladmin

這個想法是從一些精選的內容類型中進行選擇,然後添加一個密鑰,最終的配置將觸發一堆服務。但是,無論何時保存表單,存儲在app_model中的內容類型始終爲None,這顯然是不可取的。

這是Django1.8

這裏是管理員:

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

我認爲安全風險fields = __all__用法折舊。除了你沒有定義app_model作爲你的表單中的字段。嘗試fields = models.MyConfig.Meta.fields + ['app_model'] – durdenk

+0

不是問題,但謝謝你的嘗試。 –

回答

0

可惜稍微有我我夾着尾巴。缺少的代碼是excluded_fields其中包含app_model。我以爲這會將它從顯示的字段中刪除,但它實際上將它從保存到模型中的數據中刪除。

感謝大家誰看着這個。很多道歉。