ValueError at /
Cannot assign "'1'": "childDB.parent" must be a "ParentDB" instance.Cannot assign "'XXX'": "DB名.カラム名" must be a "DB名" instance.
djangoで、クライアント(ブラウザ側)から受け取ったフォームをデータベースに登録する際、表記のエラーが表示されました。このエラーを回避するには、ForeignKeyのカラムかどうかに注意する必要があります。
解決法
以下のようなデータベースを想定します。
#models.py
class ParentDB(models.Model):
id = models.AutoField(primary_key=True)
pname = models.CharField(max_length=100)
class childDB(models.Model):
id = models.AutoField(primary_key=True) #予約id, 主キー, 自動生成
parent = models.ForeignKey(ParentDB, on_delete=models.CASCADE) #外部キー
childname = models.CharField(max_length=100)
childDBのparentカラムが外部キーで設定され、parentDBを参照しています。
以下のコードのように、Foreign keyを設定しているカラムには、参照先の親キーオブジェクトを設定します。
#views.py
parent = request.POST.get('parent') #POSTメソッドで送られてきた入力値
childname = request.POST.get('childname')
#データベースへの登録
childDB.objects.create(
parent=ParentDB.objects.get(pid=parent),
childname = childname
)
まとめ
データベースの登録などを扱う際は、親キー・外部キーについてよく理解しておく必要があると感じました。
Many-to-one relationships | Django documentation
The web framework for perfectionists with deadlines.
リンク
コメント