我試圖用嵌套序列化器創建一個新的模型條目,但我得到一個NOT NULL constraint failed
錯誤。我不知道爲什麼Django Rest框架嵌套序列化器創建NOT NULL約束
models.py
:
class Messages(models.Model):
sender = models.ForeignKey(User, related_name="sender")
reciever = models.ForeignKey(User, related_name="reciever")
message = models.TextField(null=True, blank=True)
created_at = models.DateField(default=datetime.now)
subject = models.CharField(max_length=150,blank=True)
read = models.BooleanField(default=False)
def __str__(self):
return self.reciever.username
Serializer
class MessageSerializer(serializers.ModelSerializer):
reciever = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
class Meta:
model = Messages
fields = '__all__'
depth=1
def create(self,validated_data):
new_message = Messages.objects.create(
sender = self.context['request'].user,
# reciever = User.objects.filter(id=validated_data['reciever']),
message = validated_data['message'],
subject = validated_data['subject'],
created_at = datetime.now(),
)
new_message.save()
return new_message
POST請求:
{
"reciever":12,
"message":"Hello World",
"subject":"newtest"
}
響應:
IntegrityError at /api/messages/
NOT NULL constraint failed: index_messages.reciever_id
views.py
:
class MessagesCreate(mixins.CreateModelMixin,
mixins.ListModelMixin,
generics.GenericAPIView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
serializer_class = MessageSerializer
queryset = Messages.objects.all()
def get(self,request,*args,**kwargs):
return self.retrieve(request, *args, **kwargs)
def post (self, request, *args, **kwargs):
return self.create(request,*args,**kwargs)
謝謝!第二個選項用於解決我的'NOT NULL'錯誤,但現在我得到了,'TypeError at/api/messages/ int()參數必須是字符串,類似字節的對象或數字,而不是'User ''這很奇怪,因爲我認爲我需要返回一個用戶對象來保存我的模型作爲ForeignKey。 –
@tay_thomp您必須嘗試在用戶的某個地方調用'int()'作爲參數。這是不正確的。 –
我改變的唯一的事情是在序列化程序的create方法中使用'.get()'而不是'.filter()'......我不確定'int()'會在哪裏被調用。 –