실제로 양식이 없으므로 현재 API를 만들려면 ViewSet
을 사용하고 있습니다.양식 게시에 외래 키를 제출하는 방법은 무엇입니까? python/django
나는 두 가지 모델을 가지고, 하나는 어떻게 든 유지,
이 나는 시리얼은 다음 POST
입력의 유효성을 검사하는 데 사용할 만든 사용자에 외래 키와 creator
라는 필드를 사용하여 일반 사용자 모델과 그룹 모델 내가 이해할 수와 내가 게시하려고 할 때 creator_id
가 null 그것 때문에 너무 테스트,하지만 난 비록 creator_id
를 입력 한 어떤
null value in column "creator_id" violates not-null constraint
말하는 오류가 발생합니다. 잘못된 방식으로 입력 했습니까? 또는 저장하기 위해 외래 키를 얻으려면 어떻게해야합니까?
내 그룹 모델은 다시
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
이 추가 이 두 필드는 더 이상 오류가 발생하지 않습니다.
내 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)
{
"group_name": "bridge",
"creator_id": 1
}
이 "creator_id": "1"
및 "creator": "1"
@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)
내가 사용 게시 시도 ... 내 view.py 0
여전히 같은 오류가 발생합니다 ...
어떻게 해결할 수 있습니까?
미리 감사드립니다.
당신이 무슨 뜻인지 이해할 수 있지만, 제가 creator_id''에'creator'을 변경하려면? 이것은 내가 붙어있는 곳이다. 모델에서 'group_name'을 사용하고 있지만'SerializerMethodField'를 통해 원하는 경우'g_name'으로 변경할 수 있다고 가정 해 보겠습니다. – Dora
모델에서'creator'가 ForeignKey입니다. 그래서 장고에서는 실제로 다른 모델 (이 경우'User')에 대한 참조 인 id 번호를 참조하지 않습니다. 그 모델은 그것의 자신의'id' 필드를 가지고 있습니다. 'creator_id'를 원한다면 실제로'creator.id'가 될 것입니다.'User' 모델'id' 필드를 참조 할 것이기 때문입니다. – joed4no
그래서 나는'def get_creator_id (self, obj) : return obj.creator를 가지고있다.id '를 serializer의'fields'에 입력하면 어떻게됩니까? 아니면 생성자의 ID를 어떻게 얻을 수 있습니까? – Dora