Reputation: 47
I have error after send post request for creating new item in user field - it return null value in column "user_id" violates not-null constraint DETAIL: Failing row contains (61, My Company, {2,3}, 2020-08-08 10:41:54.355926+00, My desc, 2, 2, null). . My data for send in JSON
{
"name": "My Company",
"members":[2, 3] ,
"user": 2,
"description": "My desc",
"status": 2,
"theme": 2
}
serializers.py
class AccountSerializer(serializers.ModelSerializer):
user=serializers.StringRelatedField(read_only=False)
class Meta:
model=Account
fields='__all__'
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
class CompanySerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
try:
if self.context['request'].method in ['GET']:
self.fields['members'] = serializers.SerializerMethodField()
except KeyError:
pass
class Meta:
model = Company
fields = '__all__'
def get_members(self, obj):
accounts = Account.objects.filter(id__in=obj.members)
return AccountSerializer(accounts, many=True).data
class CompanyListSerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = '__all__'
Upvotes: 0
Views: 709
Reputation: 1392
Looking at other questions of yours, it seems like you need user = UserSerializer(read_only=True)
for GET request only. If so,
class CompanySerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
try:
if self.context['request'].method in ['GET']:
self.fields['members'] = serializers.SerializerMethodField()
self.fields['user'] = UserSerializer()
except KeyError:
pass
class Meta:
model = Company
fields = '__all__'
def get_members(self, obj):
accounts = Account.objects.filter(id__in=obj.members)
return AccountSerializer(accounts, many=True).data
Upvotes: 1