ivica
ivica

Reputation: 1426

Saving related objects

I'm having some trouble saving related objects with Django Rest Framework. Here are my models

# models.py
class PowerStatus(models.Model):
    status = models.CharField(max_length=50)

class VirtualMachine(models.Model):
    power_status = models.ForeignKey(PowerStatus, verbose_name='Power status')

My serializers look like this:

# serializers.py
class PowerStatusSerializer(serializers.ModelSerializer):
    status = serializers.CharField(max_length=30)

    class Meta:
        model = PowerStatus

class VMSerializer(serializers.ModelSerializer):
    power_status = PowerStatusSerializer()

    class Meta:
        model = VirtualMachine

    def create(self, validated_data):
        power_status_data = validated_data.pop('power_status')
        vm = VirtualMachine.objects.create(**validated_data)
        PowerStatus.objects.create(vm=vm, **power_status_data)

        return vm

Error that I'm getting is: django.db.utils.IntegrityError: (1048, "Column 'power_status_id' cannot be null")

I was following http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects but am doing something wrong.

:EDIT:

After dealing with Column cannot be null, another problem arose;

ValueError: Cannot assign "OrderedDict([('status', 'Running')])": "VirtualMachine.power_status" must be a "PowerStatus" instance.

Upvotes: 0

Views: 431

Answers (1)

Nauman Tariq
Nauman Tariq

Reputation: 1410

In VirtualMachine model pass null=True to power_status field.

class VirtualMachine(models.Model):
    power_status = models.ForeignKey(PowerStatus, verbose_name='Power status', null=True)

Upvotes: 1

Related Questions