実際に私はフォームを持っていない、私は現在ViewSet
を使用してAPIを作成しています。フォームキーに外部キーを送信する方法Python/django
私は2つのモデル、1が通常のユーザモデルと、その後POST
入力を検証するためにそれを使用する私はシリアライザを作成したユーザー
へのForeignKeyでcreator
という名前のフィールドを使用してグループモデルで、何とか私は続けるを持っています私が理解することができますどの
null value in column "creator_id" violates not-null constraint
を言って、私は私が投稿しようとすると、creator_id
がnullですが、私もcreator_id
を入力しなかったので、それはだとあまりにもテストエラーを取得に。間違った方法で入力していますか、それを保存するために外部キーを取得する方法はありますか?
は、私のグループのモデルは、再びこの
class Group(Model):
creator = ForeignKey(User,
null=True, // I used this to test I am right with the error
blank=True, // I used this to test I am right with the error
on_delete=CASCADE,
related_name="%(class)ss",
related_query_name="%(class)s")
group_name = CharField(max_length=256, unique=True)
created_at = DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.group_name
のようなものです、私はそれが理由のcreator_id
はNULLにすることはできません右であることだかどうかを確認したいとはい、私が追加した後、右だからnull=True, blank=True
がある追加しましたこれらの2つのフィールドは、私はもうエラーを取得しません。
私GroupSerializer
class GroupSerializer(ModelSerializer):
group_id = SerializerMethodField()
creator_name = SerializerMethodField()
creator_id = SerializerMethodField()
class Meta:
model = Group
fields = ['group_id', 'group_name', 'creator_id', 'creator_name']
def get_group_id(self, obj):
return obj.id
def get_creator_name(self, obj):
return obj.creator.tutor_name
def get_creator_id(self, obj):
return obj.creator.id
def create(self, validated_data):
return Group.objects.create(**validated_data)
私view.py
@csrf_exempt
def create(self, request):
data = GroupSerializer(data=request.data) // this would return the `group_name` and `creator_id` I entered
if data.is_valid(): // this would return true
data.save()
return Response({'status': True})
return Response({'status': False, 'message': data.errors}, status=400)
私が使用して投稿してみました...
{
"group_name": "bridge",
"creator_id": 1
}
はと"creator": "1"
はまだ同じエラーが発生しています...
どうすれば解決できますか?
ありがとうございます。
を私はあなたが何を意味するかを理解することができますが、私はcreator_id' 'に' creator'を変更するには何をしたい場合は?これは私が立ち往生している場所です。モデルが 'group_name'を使っているのを知っていますが、 'SerializerMethodField'を使いたい場合は' g_name'に変更することができます。 – Dora
モデルの 'creator'がForeignKeyです。だから、Djangoでは実際にはID番号、別のモデルへの参照(この場合は 'User')を参照していません。そのモデルは独自の 'id'フィールドを持っています。 'creator_id'を望むなら、それは' User'モデル 'id'フィールドを参照するので、実際には' creator.id'でしょう。 – joed4no
だから私は 'def get_creator_id(self、obj):return obj.creatorを持っている。id 'をシリアライザの 'fields'に入力するか、または作成者のIDを取得するにはどうしたらいいですか? – Dora