Reputation: 773
class B(models.model):
# some fields
class A(models.Model):
b = models.ForeignKey(B)
Serializer:
class B_Serializer(serializers.ModelSerializer):
class Meta:
model = B
fields = '__all__'
class A_Serializer(serializers.ModelSerializer):
b = BSerializer()
class Meta:
model = A
fields = '__all__'
Task:
def task():
data = {}
b = B.objects.get(id=1)
data['b'] = b
serializer = A_Serializer(data=data)
if serializer.is_valid():
serializer.save()
But the serailizer.is_valid() gives error that it expected a dictionary but got that object. Now if I do this -
data['b'] = b.__dict__
I get an error that B with this id is already present. B is a modelSerializer and calling serializer.is_valid() from a function which is a task in celery
Upvotes: 1
Views: 265
Reputation: 47374
Instead of providing b
object to the serializer's data you can pass it to the save method, like this:
def task():
data = {}
b = B.objects.get(id=1)
serializer = A_Serializer(data=data)
if serializer.is_valid():
serializer.save(b=b)
Note you need to make serializer's b
field read_only
:
class A_Serializer(serializers.ModelSerializer):
b = BSerializer(read_only=True)
class Meta:
model = A
fields = '__all__'
You can find related part of the doc here.
Upvotes: 2