2015-12-15 4 views
2

Я новичок в Django, и я узнал некоторые основные вещи об этом. Моя проблема в том, что я получаю данные от моделей django, но я не могу передать/отобразить их в форме. Я хотел бы иметь form.py с 1 селектором phone_id и 3 текстовыми вводами, чтобы вставлять данные на нужный телефон.данные из views.py в формы Django

Мой models.py:

class Phone(models.Model): 
    user = models.ForeignKey(User) 
    num_calls = models.CharField(max_length=20, null=True, blank=True) 
    time_btwn_calls = models.CharField(max_length=20, null=True, blank=True) 
    psap = models.CharField(max_length=30, null=True, blank=True) 

Мой forms.py:

from django import forms 

class phoneForm(forms.Form): 

    NumberOfCalls = forms.CharField(
     min_length = 1, 
     widget=forms.TextInput({'class': 'form-control'}) 
     ) 

    TimeBetweenCalls = forms.CharField(
     widget=forms.TextInput({'class': 'form-control'}) 
     ) 

    PSAP = forms.CharField(
     min_length = 1, 
     widget=forms.TextInput({'class': 'form-control'}) 
     ) 

    def __init__(self, *args, **kwargs): 
     phone_choices = kwargs.pop('phone_choices') 
     super(Send2tcu, self).__init__(*args, **kwargs) 

     self.fields['phone'] = forms.MultipleChoiceField(
      required = True, 
      widget = forms.Select({'class': 'form-control'}), 
      choices = phone_choices 
     ) 

Я просто создать форму с 3 textInputs и MultipleChoiceField, где мне нужно, чтобы отобразить данные из дифферент phone_id.

Мой view.py:

def phone_config(request): 
    phones = Phone.objects.filter(user_id = request.user.id).values_list('id', flat=True) 

    if request.method == 'POST': 
     form = phoneForm(request.POST, phone_choices=phones) 
     if form.is_valid(): 
      cleaned_data = form.cleaned_data 
      phone_id = cleaned_data.get('phone') 
      NumberOfCalls = cleaned_data.get('NumberOfCalls') 
      TimeBetweenCalls = cleaned_data.get('TimeBetweenCalls') 
      PSAP = cleaned_data.get('PSAP') 
      Tcu.objects.filter(id=phone_id).update(
       num_calls = NumberOfCalls, 
       time_btwn_calls = TimeBetweenCalls, 
       psap = PSAP, 
      ) 
      return redirect(reverse('gracias')) 
    else: 
     form = phoneForm(phone_choices=phones) 
    return render(request, 'configurer/configurer.html', {'form': form}) 


def gracias_view(request): 
    return render(request, 'configurer/gracias.html') 

На мой взгляд, в первую очередь, я получаю все phone_id для текущего пользователя. Затем я проверяю, является ли метод post, и я получаю данные из формы, а также передаю в форму разные phone_ids.Then я проверяю, является ли форма действительной, и я создаю объект Phone. После этого назначьте различные параметры выбранному phone_id и сохраните их.

В моем коде есть что-то не в порядке. Я получаю эту ошибку:

TypeError at /configurer/

'int' object is not iterable

return render(request, 'heroconfigurer/heroconfigurer.html', {'form': form})

+2

Не могли бы вы включить трассировку стека? (Вы также можете прочитать о 'ModelForm' в какой-то момент) – Sayse

+0

C: \ Python27 \ lib \ site-packages \ django-1.8.5-py2.7.egg \ django \ forms \ widgets.py в render_options, строка 539 – picador

ответ

0

models.py:

class Phone(models.Model): 
     user = models.ForeignKey(User) 
     num_calls = models.CharField(max_length=20, null=True, blank=True) 
     time_btwn_calls = models.CharField(max_length=20, null=True, blank=True) 
     psap = models.CharField(max_length=30, null=True, blank=True) 

forms.py:

from django.forms.widgets import TextInput, Select 

class PhoneViewForm(ModelForm): 

    class Meta: 
     model = Phone 
     widgets = {'user': Select(attrs={'class': 'form-control'}), 
        'num_calls': TextInput(attrs={'class': 'form-control'}), 
        'time_btwn_calls': TextInput(attrs={'class': 'form-control'}), 
        'psap': TextInput(attrs={'class': 'form-control'}) 
        } 
     fields = ['user', 
        'num_calls', 
        'time_btwn_calls', 
        'psap' 
        ] 

Если вы манипулируете модели объекты в форме Django рекомендует использовать ModelForm. Вы также можете заполнить эту форму исходным экземпляром модели. Надеюсь, это поможет.

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