0

I have 3 models which are related to each other via ManytoMany relation like this:

class DemandEvents(models.Model):

    date = models.DateTimeField(blank=True, null=True)
    quantity = models.IntegerField(default=0)

class DemandFlows(models.Model):

    events = models.ManyToManyField(DemandEvents)
    flow = models.ForeignKey(Flow, on_delete=models.CASCADE)
    kit = models.ForeignKey(Kit, on_delete=models.CASCADE)
    monthly_quantity = models.IntegerField(default=0)

class Demand(models.Model):

    demand_flows = models.ManyToManyField(DemandFlows)
    delivery_month = models.DateTimeField(blank=True, null=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

I am trying to create the serializers for this but keep getting confused how to handle the multi-level nesting

Serializer.py

class DemandEventsSerializer(serializers.ModelSerializer):

    class Meta:
        model = DemandEvents
        fields = "__all__"

class DemandFlowsSerializer(serializers.ModelSerializer):

    class Meta:
        model = DemandFlows
        fields = "__all__"

class DemandSerializer(serializers.ModelSerializer):

    demand_flows = DemandFlowsSerializer(many=True)

    class Meta:
        model = Demand
        fields = "__all__"


    def create(self, validated_data):
        items_objects = validated_data.pop('form_list', None)
        prdcts = []
        for item in items_objects:
            i = DemandFlows.objects.create(**item)
            prdcts.append(i)
        instance = Demand.objects.create(**validated_data)
        instance.demand_flows.set(prdcts)
        return instance

How do I add events data to this DemandFlows?

3
  • Do you want to create DemandEvents using DemandSerializer ? Commented Jan 27, 2021 at 9:55
  • @BriseBalloches Yes, I am able to create DemandFlows but how do I create DemandEvents ? Commented Jan 27, 2021 at 9:57
  • 1
    Does this not answer your question ? stackoverflow.com/a/59415791/13964753 Commented Jan 27, 2021 at 10:00

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.