🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1223閲覧

DBのデータCREATE時、外部キーのフィールドに値をセットできない

gnuuu_07

総合スコア10

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/17 07:34

Djangoでアプリケーションを作成しています。
DBへデータ挿入時にモデルの外部キーのフィールドに値をセットして挿入したいのですが、
"Column 'user_id' cannnot be null"
が出ることから、userがうまくセットできていないみたいです
解決法を教えていただきたいです。
よろしくお願いします。

models.py

Python

1from django.db import models 2 3class User(models.Model): 4 name = models.CharField(max_length=100, null=False, blank=False) 5 email = models.CharField( 6 max_length=100, unique=True, null=False, blank=False) 7 password = models.TextField(null=False, blank=False) 8 zipcode = models.CharField(max_length=7, null=False, blank=False) 9 address = models.CharField(max_length=200, null=False, blank=False) 10 telephone = models.CharField(max_length=15, null=False, blank=False) 11 12 class Meta: 13 db_table = 'users' 14 15 def __str__(self): 16 return self.name 17 18class Order(models.Model): 19 user = models.ForeignKey(User, on_delete=models.CASCADE) 20 status = models.IntegerField(null=False) 21 total_price = models.IntegerField(null=False) 22 23 class Meta: 24 db_table = 'orders'

serializers.py

python

1from rest_framework import serializers 2from . import models 3 4class UserSerializer(serializers.ModelSerializer): 5 class Meta: 6 model = models.User 7 fields = '__all__' 8 9class OrderSerializer(serializers.ModelSerializer): 10 user = UserSerializer(read_only=True) 11 12 class Meta: 13 model = models.Order 14 # fields = '__all__' 15 fields = '__all__'

views.py

python

1@api_view(['GET','POST']) 2def cart(request): 3 if request.method == 'POST': 4 user = models.User.objects.get(pk=2) 5 request_data = request.data 6 request_data['user'] = user 7 serializer = serializers.OrderSerializer(data=request_data) 8 if serializer.is_valid(): 9 serializer.save() 10 return Response(status=status.HTTP_200_OK) 11 else: 12 return Response( 13 {"errors": serializer.errors}, 14 status=status.HTTP_400_BAD_REQUEST) 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_whitecat_22

2021/01/17 07:51

views.py にて、user = models.User.objects.get(pk=2) と、pk=2 としているのは特別な理由がありますか? この指定のために、Userの2件目を見に行ってしまっていませんか?
gnuuu_07

2021/01/17 08:14

postされるデータにuser情報がないためです。 そのためpostされた後に、user情報をDBから取得しそれをOrdedrの外部キー設定のuserフィールドに持たせたいという意図です。
_whitecat_22

2021/01/17 09:00

Djangoのカスタムユーザーモデルを利用することで、Order側の外部キーをUserとするだけで事足ります。 (ご参照) Django 公式ドキュメント - Django の認証方法のカスタマイズhttps://docs.djangoproject.com/ja/3.1/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project
guest

回答1

0

<コメントから転記しました>

Djangoのカスタムユーザーモデルを利用することで、Order側の外部キーをUserとするだけで事足ります。

(ご参照)
Django 公式ドキュメント - Django の認証方法のカスタマイズ

投稿2021/01/17 09:00

_whitecat_22

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問