@royalkaden (やすなが)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

vue.jsからdjangoへのデータ受け渡し方

vue.jsからdjangoへのデータの送り方を教えてください。
またフレームワークから他のフレームワークを連携?させることを指す言葉があれがそちらも教えていただきたいです。
現在djangoを使って知人を管理するシステムを作っています。
その際form画面で動的処理を行いたいためvue.jsを使用しました。
内容としては「1月を選択した際31日まで表示」「4月を選択した場合30日まで表示」を動的処理したくてvue.jsを使用しました

以下が実際のform画面です
上の月日がdjangoのformで表示したのもので
下の月日がvue.jsを使って表示しているものです
image.png

create.html
 <form method="post" action="">
    {% csrf_token %}
    <body>


    月{{ form.month}}
    日{{ form.days}}

    <div id="app">
      <label></label>
      <select v-model="selectedKey" v-on:change="set">
          <option v-for="item in month">
              [[ item ]]
          </option>
      </select>

      <label></label>
      <select>
          <option v-if="selectedItem" v-for="item in selectedItem">
              [[ item.name ]]
          </option>
      </select>
  </div>
  <script>
    var app = new Vue({
    el: '#app',
    delimiters: ["[[","]]"],
    data: {
      selectedKey: "",
      selectedItem: "",
      month:[1,2,3,4,5,6,7,8,9,10,11,12],
      items: {
            1 : [
              { name: 1 },
              { name: 2 },
              { name: 3 },
              { name: 4 },
              { name: 5 },
            ],
            2: [
              { name: 6 },
              { name: 7 },
              { name: 8 },
              { name: 9 },
              { name: 10 },
          ],
        }
    },
    methods:{
        selected: function(){
            this.selectedItem = this.items[this.selectedKey];
        },
        set: function(){
            if (this.selectedKey == 1 || this.selectedKey == 3 || this.selectedKey == 5 || this.selectedKey == 7 || this.selectedKey == 8 || this.selectedKey == 10|| this.selectedKey == 12)
                return this.selectedItem = this.items[1]
            else
                return this.selectedItem = this.items[2]
        }
    }
});
    </script>
forms.py
class HumanCreateFrom(forms.Form):

    #名前
    name = forms.CharField(
            required=True,
    )
    #年齢
    age = forms.IntegerField(
            required=True,
    )
    #アルバイト先
    part = forms.CharField(
            required=False,
    )
    #勤め先
    belongs = forms.CharField(
            required=False,
    )
    #出会い
    encounter = forms.ChoiceField(
            required=True,
            widget=forms.widgets.Select,
            choices= CATEGORY
    )
    #最寄り駅
    station = forms.CharField(
            required=False,

    )

    month = forms.ChoiceField(
            choices = YEAER_MONTH,
            required=True,
    )

    days = forms.ChoiceField(
            required=False,
            choices = DAY,
    )
    #好きなもの
    like = forms.CharField(
            required=False,

    )
    #嫌いなもの
    hate = forms.CharField(
            required=False,
    )
    #エピソード
    ep = forms.CharField(
            required=False,

    )
view.py
from django.shortcuts import render,get_object_or_404,redirect, resolve_url
from django.views.generic import CreateView,ListView,DetailView,UpdateView,DeleteView
from django.urls import reverse_lazy
from django.http import HttpResponse
from .forms import DAY2, HumanCreateFrom
from .models import humanList
from django.http.response import HttpResponse

class HumanCreate(CreateView):
    template_name = 'create.html'
    model = humanList
    fields =('name','age','part','belongs','encounter','station','month','days','like','hate','ep')
    success_url = reverse_lazy('list')

class ListHuman(ListView):
    template_name = 'list.html'
    model = humanList
    success_url = reverse_lazy('create')

class HumanDetail(DetailView):
    template_name = 'detail.html'
    model = humanList
    success_url = reverse_lazy('list')

class HumanUpdate(UpdateView):
    template_name = 'update.html'
    model = humanList
    success_url = reverse_lazy('list')
    fields =('name','age','part','belongs','encounter','station','month','days','like','hate','ep')

class HumanDelete(DeleteView):
    template_name = 'delete.html'
    model = humanList
    success_url = reverse_lazy('list')
    fields =('name','age','part','belongs','encounter','station','month','days','like','hate','ep')

class HumanForm(CreateView):
    template_name = 'create.html'
    model = humanList
    fields =('name','age','part','belongs','encounter','station','month','days','like','hate','ep')
    success_url = reverse_lazy('list')

# def humankomi(request):
#     f = HumanForm()
#     return HttpResponse(f)

def human_new(request):
    form = HumanCreateFrom(request.POST or None)
    # is_validはバリケードするメソッド
    if form.is_valid():
        Person = humanList()
        # cleaned_dataを使うことで自動でデータの整形をしてくれる
        Person.name = form.cleaned_data['name']
        Person.age = form.cleaned_data['age']
        Person.part = form.cleaned_data['part']
        Person.belongs = form.cleaned_data['belongs']
        Person.encounter = form.cleaned_data['encounter']
        Person.station = form.cleaned_data['station']
        Person.month = form.cleaned_data['month']
        Person.days = form.cleaned_data['days']
        Person.like = form.cleaned_data['like']
        Person.hate = form.cleaned_data['hate']
        Person.ep = form.cleaned_data['ep']
        # Person. = form.cleaned_data['']

        humanList.objects.create(
            name=Person.name,
            age = Person.age,
            part = Person.part,
            belongs = Person.belongs,
            encounter = Person.encounter,
            station = Person.station,
            month = Person.month,
            days = Person.days,
            like = Person.like,
            hate = Person.hate,
            ep = Person.ep
        )
        return redirect('list')
    return render(request,'create.html',{'form':form})





0 likes

No Answers yet.

Your answer might help someone💌