2014-01-16 2 views
0

Я хочу изменить виджет формы, зависит от другого значения поля. По умолчанию выбирается, потому что поле модели является внешним ключом. Мои модели заключаются в следующем:Django admin inline изменение поля выбора для charfield динамически

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 и заполнить его с экземпляром он показывает идентификатор модели а не значение (автор: 1), и имеет смысл показать его таким образом, но я хочу показать (автор: Дэн Браун). Я попытался с начальными значениями, но не работал. Любые советы по этому поводу будут высоко оценены. Спасибо

ответ

0

Ваш метод __unicode__() на модели должен диктовать то, что показано там, если я чего-то не пропущу.

На модели:

class ProductFeatureValue(BaseName): 

    [... snipped code ...] 

    def __unicode__(): 
     return self.feature 

Этот фрагмент кода предполагает, что self.feature является то, что вы хотите, чтобы вернуться, а не что-то другое на родителе BaseName.

Смежные вопросы