【问题标题】:Accessing admin model instance in form以表单访问管理模型实例
【发布时间】:2011-07-21 14:06:48
【问题描述】:
class ProductAdmin(admin.ModelAdmin):
    form = ProductAdminForm()

class ProductAdminForm(forms.ModelForm): 
    def __init__(self, request, *args, **kwargs):
         super(ProductAdminForm, self).__init__(*args, **kwargs)
         self.fields['field1'] = forms.CharField(required=False)
         self.fields['field2'] = forms.IntegerField()

如何将产品实例从 ProductAdmin 传递到 ProductAdminForm?我想根据产品实例提供不同的字段。

【问题讨论】:

    标签: django django-admin django-forms


    【解决方案1】:

    这个:

    class ProductAdminForm(forms.ModelForm):
         class Meta:
             model = Product
    
         def __init__(self, *args, **kwargs):
             super(ProductAdminForm, self).__init__(*args, **kwargs)
    
                 product_instance = self.instance
                 if product_instance.id and product_instance.myField == "thatValue":
                     self.fields['field1'] = forms.CharField(required=False)
                     self.fields['field2'] = forms.IntegerField()
    

    【讨论】:

    • 好的,但是我有一个问题,我不知道用什么代替???? form = ProductAdminForm(instance=????)
    • 您不必指定它。默认情况下,实例是当前编辑的产品(如果创建则没有实例)
    • 但是 Django 为 'created' 和 'instance' 抛出 KeyError 异常
    • 现在我没有这个错误,但是self.instance.id、self.instance.price等字段是None。我尝试编辑对象,而不是创建对象,所以奇怪的是一切都是无。
    • 嗯,它适用于我当前正在编辑的项目。除了我的 init 上没有请求参数,请尝试将其删除。并且您必须在 ProductAdminForm 定义中添加class Meta: model = Product,就像我重新编辑的帖子中一样。
    猜你喜欢
    • 2011-07-29
    • 2011-04-21
    • 2015-11-15
    • 1970-01-01
    • 2019-10-08
    • 2019-12-13
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多