###前提・実現したいこと
引き続きdjangoを使用した簡単な投稿サイトを作成しております。
フォームより受け取ったデータをテーブルへ反映させたいと思っているのですが、外部キー関連でエラーが出てしまい中々先へ進みません。
まずはモデルとフォームをご確認下さい。
♯models.py class Situation(models.Model): s_id = models.IntegerField() situation = models.CharField(max_length=100, unique=True) class Pop_data(models.Model): p_id = models.AutoField(primary_key=True) s_id = models.ForeignKey(Situation) pop = models.CharField(max_length=100) ruby = models.CharField(max_length=100) ex_1 = models.TextField() date = models.DateTimeField(default=datetime.now)
#forms.py class PopForm(forms.ModelForm): class Meta: model = Pop_data fields = ('pop', 'ruby',) class SituationForm(forms.ModelForm): class Meta: model = Situation fields = ('situation',)
次に実際に動作しますビューおよびhtmlをご確認下さい。
#views.py def category(request, s_id): m_data = Pop_data.objects.filter(s_id__s_id = s_id) if request.method == 'POST': form = PopForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.save() return HttpResponseRedirect(reverse('sales:category')) pass else: form = PopForm() return render(request, 'each_page/category.html', {'m_data': m_data, 's_id': s_id, 'form':form})
#category.html <form action="{% url 'sales:category' s_id %}" method="POST"> {% csrf_token %} {{form}} <input type="submit" value="POST"/> </form>
となっております。
###発生している問題・エラーメッセージ
上記コードを動作すべく、ブラウザより'pop'および'ruby'のテキストを投稿すると、下記エラーが発生します。
♯error NOT NULL constraint failed: sales_pop_data.s_id_id
これはSituationモデルの方に何も数値が渡せていないからかな??と考え、
viewsの「if request.method == 'POST'」以下を下記のように編集したところ、
#views.pyの該当部分 if request.method == 'POST': form = PopForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.s_id = s_id ← ※ここを追加 post.save() return
すると今度は下記エラーが発生しました。
♯error Cannot assign "'2'": "Pop_data.s_id" must be a "Situation" instance.
アサインできなかった2はs_idのことですが、確かにs_idはpop_dataの外部キーなので、それはできないだろ…という結果に;
ここから先に進めずどうすればいいかという状態です。
どなたかご教示頂けましたら幸いでございます。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/31 22:10
2017/08/31 22:25 編集