私はDjangoモデルユーザを参照するモデルuserpreferenceを持っています。私はエラーが発生し続ける: IntegrityError: null value in column "user_id" violates not-null constraint DETAIL: Failing row contains (dfac4cb7-0bdb-44e4-b951-c0c9386bf143, f, null)
新しいuserpreferenceを投稿しようとすると。私はポストのために送られたデータは以下のとおりです。カラム "user_id"のDjangoヌル値がnullでない制約に違反しています
{
"user": "http://127.0.0.1:8000/user/4/",
"send_email": false
}
私userpreferenceモデルは次のとおりです。
class UserPreferenceList(generics.ListCreateAPIView):
model = UserPreference
permission_classes = (permissions.IsAuthenticated, CustomObjectPermissions)
serializer_class = UserPreferenceListSerializer
queryset = UserPreference.objects.all()
class UserPreferenceDetail(generics.RetrieveUpdateDestroyAPIView):
model = UserPreference
permission_classes = (permissions.IsAuthenticated, CustomObjectPermissions)
serializer_class = UserPreferenceSerializer
queryset = UserPreference.objects.all()
と私のuserpreferenceシリアライザは、次のとおりです:
import uuid
from django.db import models
from django.contrib.auth.models import User
class UserPreference(models.Model):
class Meta:
app_label = 'my_app'
permissions = (
('view_userpreference', 'View User Preference'),
)
uuid = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
user = models.OneToOneField(User, related_name="user_preference", on_delete=models.CASCADE, db_index=True)
send_email = models.BooleanField(default=True, db_index=True)
def __unicode__(self):
return u"<UserPreference {0} {1}>".format(str(self.uuid), self.user.id)
私userpreference図である
class UserPreferenceSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.HyperlinkedRelatedField(view_name='user-detail', read_only=True, lookup_field="id", lookup_url_kwarg="pk")
class Meta:
model = UserPreference
fields = ('url',
'user',
'send_email')
class UserPreferenceListSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.HyperlinkedRelatedField(view_name='user-detail', read_only=True, lookup_field="id", lookup_url_kwarg="pk")
class Meta:
model = UserPreference
fields = ('url',
'user',
'send_email')
提案がありますか?
編集:私のビューに投稿メソッドを追加すると、この問題が解決されました。 UserPreferenceListクラスでは、私がコメントを追加しました:理由はここにこのラインの起こっている
def post(self, request, *args, **kwargs):
user_url = request.data.get('user', None)
if user_url:
try:
path = urlparse.urlparse(user_url).path
match = resolve(path)
user_pk = match.kwargs.get('pk')
except (Resolver404, User.DoesNotExist) as e:
raise CustomAPIException("You need to send the url of a User to create its UserPreference.", status=status.HTTP_400_BAD_REQUEST)
else:
raise CustomAPIException("You need to identify a User to create its UserPreference.", status=status.HTTP_400_BAD_REQUEST)
userpreference_obj = UserPreference(user_id=user_pk, send_email=request.data.get('send_email', False))
userpreference_obj.save()
d = UserPreferenceSerializer(userpreference_obj, context={'request': request}).data
return Response(d, status=status.HTTP_201_CREATED)