2017-04-30 7 views
0

choicesの動的リストをsymbolフィールドに作成しています。そのリストをビューの内側に作成し、それをコンストラクタの形式にします。私はDictionaryモーダルからすべてのデータを取りたいフォームの内容が変更されるのはなぜですか?

は私の形でchoices、ショーの中に置くが、私はいけない、同じ時間に、すでにRequirementモーダルに存在しているデータを表示する必要があります。私はこれにボタンフォーム変更を送信]をクリックしようとすると、その後 enter image description here

:ATはそれを開始

は正しいフォームを示し(いただきまし間違っhappenes?) enter image description here

models.py:

class Dictionary(models.Model): 
    symbol = models.CharField(_('Symbol'), max_length=250) 
    name = models.CharField(_('Name'), max_length=250) 

class Requirement(models.Model): 
    project = models.ForeignKey(Project, on_delete=models.CASCADE) 
    symbol = models.CharField(_('Symbol'), max_length=250) 
    name = models.CharField(_('Name'), max_length=250) 

forms.py:

class RequirementForm(forms.ModelForm): 
    symbol = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple) 

    class Meta: 
     model = Requirement 
     fields = ('symbol',) 

    def __init__(self, final_list, *args, **kwargs): 
     super(RequirementForm, self).__init__(*args, **kwargs) 
     self.fields['symbol'].choices = [(x[0], x[1]) for x in final_list)] 

views.py:

def requirement_add(request, project_code): 
    data = dict() 
    project = get_object_or_404(Project, pk=project_code) 

    requirements = Requirement.objects.filter(project=project_code) 
    result = [] 
    for x in requirements: 
     v = (x.symbol, x.name) 
     result.append(v) 
    full_result = [(x.symbol, x.name) for x in Dictionary.objects.all()] 
    final_list= list(set(full_result)^set(result)) 

    if request.method == 'POST': 
     form = RequirementForm(request.POST, final_list) 
     if form.is_valid(): 
      requirement_dict = dict(((x.symbol, x.name) for x in Dictionary.objects.all())) 
      symbols = form.cleaned_data.get('symbol') 
      requirement = form.save(commit=False) 
      for symbol in symbols: 
       requirement.project = project 
       requirement.symbol = symbol 
       requirement.name = requirement_dict [symbol] 
       requirement.pk = None 
       requirement.save() 
      data['form_is_valid'] = True 
      requirements = Requirement.objects.filter(project=project_code) 
      context = {'project': project, 'requirement': requirement, 'requirements': requirements} 
      data['html_requirement'] = render_to_string('project/requirement_list.html', context) 
     else: 
      data['form_is_valid'] = False 
    else: 
     form = RequirementForm(final_list) 
    context = {'project': project, 'form': form} 
    data['html_requirement_form'] = render_to_string('project/requirement_add.html', context, request=request) 
    return JsonResponse(data) 

ERROR:

Traceback (most recent call last): 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\exception.py", line 39, in inner 
    response = get_response(request) 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\reversion\revisions.py", line 296, in do_revision_context 
    return func(*args, **kwargs) 
    File "C:\Users\Nurzhan\PycharmProjects\RMS\project\views.py", line 616, in requirement_add 
    if form.is_valid(): 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\forms.py", line 169, in is_valid 
    return self.is_bound and not self.errors 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\forms.py", line 161, in errors 
    self.full_clean() 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\forms.py", line 370, in full_clean 
    self._clean_fields() 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\forms.py", line 382, in _clean_fields 
    value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name)) 
    File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\widgets.py", line 626, in value_from_datadict 
    return data.get(name) 
AttributeError: 'list' object has no attribute 'get' 
+0

このビューの残りの部分はどこですか?そして、内容が正確に変わるときは? –

+0

@DanielRosemanこんにちは!私は私のビューの完全なコードを追加します。それを確認してください。私が私の記事で言ったように、私はユーザーがチェックボックスを選択してデータベースにデータを追加できるフォームを持っています。私は動的リストから 'choises'を作成しましたが、フォームのsubmitボタンをクリックすると問題が発生します。フォームはデータベースにデータを追加しません。フォームの内容を変更するだけです。私はどこで間違ったのか分からないのですか?あなたはなにか考えはありますか?! –

+0

また、私は自分の投稿で言ったように、Dictionaryモーダルのすべてのデータを選択肢の中に入れて自分のフォームに表示したいが、同時に、Requirementモーダルにすでに存在するデータを表示する必要はない。私のダイナミックリストが動作します。しかしフォームは間違っています。投稿では、送信ボタンをクリックするとフォームのContectがどのように変化するかの写真を見ることができます。 –

答えて

0

最後に、私は私のミスを発見!この行には:

RequirementForm(data=request.POST, final_list=final_list) 
関連する問題