eigentlich habe ich kein Formular, ich verwende derzeit die ViewSet
API zu erstellen.Wie bekomme ich einen Fremdschlüssel in einen Formulareintrag? Python/Django
Ich habe zwei Modelle, ist ein regelmäßiges Benutzermodell und ein Gruppenmodell, das ein Feld creator
mit ForeignKey den Benutzer
Ich habe ein Serializer dann benannt verwendet verwenden, um die POST
Eingaben zu validieren, irgendwie ich halte auf den Fehler immer sagt
null value in column "creator_id" violates not-null constraint
Was ich verstehen kann, und ich getestet auch, dass es ist, weil creator_id
null ist, wenn ich zu schreiben versuchen, aber ich habe die creator_id
obwohl ein. Betrete ich es falsch oder wie bekomme ich den Fremdschlüssel, um ihn zu speichern?
Mein Gruppenmodell ist wie diese
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
wieder, fügte ich null=True, blank=True
ist, weil ich, wenn ich Recht habe sehen will, dass es wegen creator_id
ist nicht null sein kann und ja, ich bin direkt nach der Zugabe von In diesen beiden Feldern bekomme ich den Fehler nicht mehr.
mein 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)
mein 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)
Ich versuchte Posting mit ...
{
"group_name": "bridge",
"creator_id": 1
}
versucht "creator_id": "1"
und "creator": "1"
immer noch den gleichen Fehler ...
Wie kann ich das beheben?
Vielen Dank im Voraus
Ich kann verstehen, was du meinst, aber was, wenn ich will 'creator' in' creator_id' ändern? Hier stecke ich fest. Sagen wir, ich weiß, dass das Modell 'group_name' verwendet, aber ich kann es in 'g_name' ändern, wenn ich das 'SerializerMethodField' möchte. – Dora
In Ihrem Modell ist' creator' ein ForeignKey. In Django bezieht es sich also nicht auf eine ID-Nummer, sondern auf ein anderes Modell (in diesem Fall "Benutzer"). Dieses Modell hat sein eigenes ID-Feld. Wenn Sie die 'creator_id' wollten, wäre das tatsächlich' creator.id', da dies sich auf das 'User' models 'id'-Feld bezieht. – joed4no
deshalb habe ich 'def get_creator_id (self, obj): return obj.creator.ID ', die dann in die' Felder 'des Serialisierers eingegeben wird, oder wie kann ich dann die ID des Erstellers erhalten? – Dora