Django ModelForm没有在modeladmin中存储foreignkey

时间:2016-09-28 14:40:47

标签: django django-forms

我有以下代码,它应该创建一个MyConfig对象。但是,它并不是因为app_model总是返回为None。

我们的想法是从一些精选的内容类型中进行选择,然后添加一个密钥,生成的配置将触发一堆服务。但是,每当我保存表单时,存储在app_model中的contenttype始终为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)

1 个答案:

答案 0 :(得分:0)

不幸的是,我的两条腿之间有一条尾巴。丢失的代码是包含excluded_fields的{​​{1}}。我认为这会将其从显示的字段中删除,但它实际上会将其从保存时保存到模型中的数据中删除。

感谢所有关注此事的人。许多道歉。