2013-11-17 5 views
2

у меня есть эти моделиДжанго ModelForm сделать поле из других областей

class Color(models.Model): 
    code = models.CharField(max_length=7, unique=True) 
    name = models.CharField(max_length=100) 
class Tshirt(models.Model): 
    name = models.CharField(max_length=100) 
    color = models.ForeignKey(Color) 

И у меня есть эта форма

class TshirtForm(forms.ModelForm): 
    color_code = forms.CharField(min_length=7, max_length=7) 
    class Meta: 
     model = Tshirt 
     fields = ('name',) 

Как я могу получить объект Color из поля color_code и сохранить, что в качестве цвета новой tshirt при сохранении модели модели?

+0

Можете ли вы не просто иметь ее в качестве раскрывающихся выбора? – karthikr

ответ

3

Если вы хотите, чтобы ваши пользователи выбрать цвет просто расширить поля

class TshirtForm(forms.ModelForm): 
    class Meta: 
     model = Tshirt 
     fields = ('name', 'color') 

Это даст вам выберите поле в форме. Просто убедитесь, что вы добавили некоторые цвета для своих пользователей на выбор.

Но если вы хотите, чтобы ваши пользователи «создавали» новые цвета, вы должны использовать две формы: одну для цвета, а другую для футболки. Это проще, чем пытаться сделать все в одной форме.

UPDATE:

Ok, обновите форму, как это:

class TshirtForm(forms.ModelForm): 
    color_code = forms.CharInput() 

    class Meta: 
     model = Tshirt 
     fields = ('name', 'color') 
     widget = {'color': forms.HiddenInput(required=False)} 

    def clean(self, *args, **kwargs): 
     # If users are typing the code, better do some validation 
     try: 
      color = Color.objects.get(
       code=self.cleaned_data.get('color_code') 
      ) 
     except (ObjectDoesNotExist, MultipleObjectsReturned): 
      raise forms.ValidationError('Something went wrong with your code!') 
     else: 
      # Update the actual field 
      self.cleaned_data['color'] = color.id 
+0

Я хочу, чтобы пользователи выбирали цвет, но я не хочу, чтобы цвет находился в поле выбора. Я хочу, чтобы цвет был получен из введенного кода. – bab

+0

Я обновил ответ. – danielcorreia

+0

Я получаю сообщение об ошибке «main_tshirt.color_id может не быть NULL». – bab

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