2017-07-22 19 views
0

POSTリクエストでフォームデータをデータベースに保存しようとしていますが、リクエストは正常に完了しましたが、POSTリクエストは正常に終了しましたが、データはデータベースに保存されていません

models.py

class Image(models.Model): 
    user = models.ForeignKey(User, related_name='images') 
    tagName = models.CharField(max_length=255) 
    instance = models.CharField(max_length=255) 

forms.py

class BuildImageForm(forms.ModelForm): 
class Meta: 
    fields = ('user', 'tagName', 'instance') 
    model = Image 

views.py

class BuildImage(LoginRequiredMixin, CreateView): 
    form_class = BuildImageForm 
    model = Image 
    template_name = 'images/buildImage.html' 
    success_url = 'user/gui' 

def get(self, request, *args, **kwargs): 
    objectlist = request.user.instances.all() 
    return render(request, 'images/buildImage.html', {'form': forms.BuildImageForm, 
                 'objectlist': objectlist}) 

def form_valid(self, form): 
    instance = form.save() 
    instance.user = self.request.user 
    instance.tagName = self.request.tagName 
    instance.instance = str(self.request.instance_name) 
    instance.save() 
    return HttpResponse(status=200) 

アップデート - を編集私は私の見解更新しています

def post(self, request, *args, **kwargs): 
    if request.method == 'POST': 
     form = BuildImageForm(request.POST) 
     if form.is_valid(): 
      data = form.cleaned_data 
      form.instance.user = self.request.user 
      form.instance.tagName = data['tagName'] 
      form.instance.instance = data['instance'] 
      form.save() 
     else: 
      print(form.errors) 
    return HttpResponse(status=200) 

が今では、コンソールでそのエラーを出力します。

<ul class="errorlist"><li>instance<ul class="errorlist"><li>This field is required.</li></ul></li></ul> [23/Jul/2017 04:36:56] "POST /user/images/buildImage/ HTTP/1.1" 200 0

答えて

1

は、このようなあなたのビューの方法を変更してみてください、

def form_valid(self, form): 
    instance = form.save(commit=False) 
    instance.user = self.request.user 
    instance.save() 
    return HttpResponse(status=200) 
+0

はまだデータベースに保存されません! –

+0

質問の更新をご覧ください! –

+0

cleaned_dataのユーザー以外のデータをインスタンスに明示的に割り当てる必要はありません。モデルフォームはそこにあります。ユーザーをインスタンスに割り当てるだけで済みます。残りのフォームは、フォームを送信するときにすでに割り当てられています。 – zaidfazil

0

あなたが実際にデータを追加する前に、ファイルを保存している

try: 
"save to database code here" 
except Exception as e: 
    print "error here" print e 
+0

これを行う方法を教えてもらえますか? –

+0

質問の更新をご覧ください! –

+0

試し: eと例外を除いて を「ここにデータベース・コードに保存」: 印刷「エラーをここで」 印刷E – waleedaz

1

更新キャッシュ部

にキャッシュされたいくつかのエラーがあるかもしれデータベース操作 のために試してみて、キャッシュ設定しよう

def form_valid(self, form): 
    instance = form.save(commit=False) 
    instance.user = self.request.user 
    instance.tagName = self.request.tagName 
    instance.instance = str(self.request.instance_name) 
    instance.save() 
    return HttpResponse(status=200) 
+0

どうすればいいですか? –

+0

こんにちは@Exprator!質問の更新を見てみてください! –

0

私の問題は、インスタンス入力フィールドのテンプレートにtitle属性を指定するだけで解決しました。

更新されたコードとして:

buildImage.html

<form class="form-horizontal" method="POST" id="dockerForm"> 
        {% csrf_token %} 
        <fieldset> 
         {% if not objectlist %} 
          <h3><strong>Sorry!</strong> You couldn't have created any Instance yet! <strong>Let's <a href="{% url 'users:create' %}">Create One </a></strong></h3> 
         {% else %} 
         <div class="form-group"> 
          <span class="col-md-1 col-md-offset-2 text-center"><label for="package">Select Your Instance:</label></span> 
          <div class="col-md-8"> 
           <select class="form-control" name="instance" id="instance_id" title="Select your Instance"> 
            {% for element in objectlist %} 
             <option value={{ element.name }}> {{ element.name }} </option> 
            {% endfor %} 
           </select> 
           {% endif %} 
          </div> 
         </div> 
        </fieldset> 
       </form> 

forms.py

class BuildImageForm(forms.ModelForm): 
class Meta: 
    fields = ('tagName', 'instance') 
    model = Image 

views.py

def post(self, request, *args, **kwargs): 
    if request.method == 'POST': 
     form = BuildImageForm(request.POST) 
     if form.is_valid(): 
      data = form.cleaned_data 
      form.instance.user = self.request.user 
      form.instance.tagName = data['tagName'] 
      form.instance.instance = data['instance'] 
      form.save() 
     else: 
      print(form.errors) 
    return HttpResponseRedirect(reverse('users:gui')) 
関連する問題