Django管理员内联表格动态更改选择字段到charfield

时间:2014-01-16 08:27:51

标签: python django django-forms django-admin

我想根据其他字段值更改formfield小部件。默认为select,因为模型字段是外键。我的模型如下:

class ProductFeatureValue(BaseName):

   feature = models.ForeignKey('ProductTypeFeature')

   class Meta:
      verbose_name = _(u'Product Feature Value')
      verbose_name_plural = _(u'Product Feature Values')


class ProductFeature(models.Model):

    product = models.ForeignKey('Product')
    feature = models.ForeignKey('ProductTypeFeature')
    value = models.ForeignKey('ProductFeatureValue')

我的表格如下:

class ProductFeatureFormForInline(ModelForm):

class Meta:
    model = ProductFeature

def __init__(self,*args,**kwargs):
    super(ProductFeatureFormForInline,self).__init__(*args,**kwargs)
    if isinstance(self.instance,ProductFeature):
        try:
            widget_type = self.instance.feature.product_type.producttypefeature_set.all()[0].widget #TODO Fix that 0 slice
            if widget_type == u'TEXT':
                self.fields['value'] = CharField(widget=TextInput())
            if widget_type == u'MULTIPLE_SELECT':
                self.fields['value'].widget = MultipleChoiceField()
        except:
            pass

它改变了字段小部件但是当它使它成为charfield并用实例填充它时它显示模型的id而不是值(作者:1)并且显示它的方式是有意义的,但我想显示(作者:丹布朗)。 我尝试过初始值,但没有工作。任何有关这方面的提示都将受到高度赞赏。感谢

1 个答案:

答案 0 :(得分:0)

如果我没有遗漏某些内容,那么模型上的__unicode__()方法应该决定那里显示的内容。

在你的模特上:

class ProductFeatureValue(BaseName):

    [... snipped code ...]

    def __unicode__():
        return self.feature

此代码段假定self.feature是您要返回的内容,而不是父BaseName上的其他内容。