Django creating model with foreign key

Thinker

I have models like following:

class Task(models.Model):
    what_task = models.CharField(max_length=100, )

    #This helps to print in admin interface
    def __str__(self):
        return u"%s" % (self.what_task)


class Step(models.Model):
    task = models.ForeignKey(Task, related_name='steps', on_delete=models.CASCADE, )
    what_step = models.CharField(max_length=50, blank=True, )

    #This helps to print in admin interface
    def __str__(self):
        return u"%s" % (self.what_step)

I have serializers:

class StepSerializer(serializers.ModelSerializer):
    class Meta:
        model = Step
        fields = '__all__'

class TaskSerializer(serializers.ModelSerializer):
    steps = StepSerializer(many=True)
    class Meta:
        model = Task
        fields = '__all__'

    def create(self, validated_data):
        steps_data = validated_data.pop('steps')
        task = Task.objects.create(**validated_data)
        for step_data in steps_data:
            Step.objects.create(task=task, **step_data)
        return task 

and my views:

@api_view(['GET', 'POST'])
def task_list(request):
    """
    List all tasks, or create a new task.
    """
    if request.method == 'GET':
        tasks = Task.objects.all()
        serializer = TaskSerializer(tasks, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = TaskSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(
                serializer.errors, status=status.HTTP_400_BAD_REQUEST)

I am expecting that when I create a Task, I also create it's Steps in a single request. My request JSON sent from frontend looks like following:

{what_task: "Sample task three", steps:[{task: 0, what_step: "Test Step"}]}

This throws me {"steps":[{"task":["This field is required."]}]} error. What am I doing wrong? Am I sending wrong JSON?

P.S.: As I do not have a task id at the time of creation, I was sending 0, what should be correct value, how am I suppose to handle it on backend?

Michael Rigoni

The StepSerializer is expecting to receive a Task id. In your situation, it is not required as you grab it from the parent serializer (TaskSerializer).

Just modify your StepSerializer to exclude the task field:

class StepSerializer(serializers.ModelSerializer):
    class Meta:
        model = Step
        exclude = ('task',)

You may also set that field as read_only if you want to display but it should not be necessary as it is included in the Task.

In any case you may omit the task field in steps when creating the task (any value you set will be ignored anyway).

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Django rest framework foreign key constraint fails creating model

From Dev

Saving a model with a foreign key in django

From Dev

Django Multiple Foreign Key Model

From Dev

django count of foreign key model

From Dev

Saving a model with a foreign key in django

From Dev

django Creating a link for Foreign key in Admin

From Dev

django intermediate model with no foreign key error

From Java

How to add condition on Django model foreign key?

From Dev

Django admin limit model from foreign key

From Dev

Django model instance from foreign key

From Dev

Django model single instance per foreign key

From Dev

django user model foreign key to company

From Dev

Django get all foreign key names of a model

From Dev

Django - Adding a foreign key representing a user to a model

From Dev

Django model one foreign key to many tables

From Dev

Django different model manager on foreign key

From Dev

Django Introduce a foreign key from a model CharField

From Dev

django user model foreign key to company

From Dev

Django model foreign key from existing table

From Dev

Django Introduce a foreign key from a model CharField

From Dev

django intermediate model with no foreign key error

From Dev

Django model has no foreign key object set

From Dev

Add a conditional foreign key field in a DJANGO model

From Dev

django upload to image model with foreign key to user

From Dev

Foreign key to different model field in django

From Dev

DJango queryset filter with a foreign key of a different model

From Dev

Auto-create model with foreign key when model is created - Django

From Dev

Django Model Property - Count foreign key for multiple instances of model

From Dev

Django model serialization returns only primary key for foreign key

Related Related

  1. 1

    Django rest framework foreign key constraint fails creating model

  2. 2

    Saving a model with a foreign key in django

  3. 3

    Django Multiple Foreign Key Model

  4. 4

    django count of foreign key model

  5. 5

    Saving a model with a foreign key in django

  6. 6

    django Creating a link for Foreign key in Admin

  7. 7

    django intermediate model with no foreign key error

  8. 8

    How to add condition on Django model foreign key?

  9. 9

    Django admin limit model from foreign key

  10. 10

    Django model instance from foreign key

  11. 11

    Django model single instance per foreign key

  12. 12

    django user model foreign key to company

  13. 13

    Django get all foreign key names of a model

  14. 14

    Django - Adding a foreign key representing a user to a model

  15. 15

    Django model one foreign key to many tables

  16. 16

    Django different model manager on foreign key

  17. 17

    Django Introduce a foreign key from a model CharField

  18. 18

    django user model foreign key to company

  19. 19

    Django model foreign key from existing table

  20. 20

    Django Introduce a foreign key from a model CharField

  21. 21

    django intermediate model with no foreign key error

  22. 22

    Django model has no foreign key object set

  23. 23

    Add a conditional foreign key field in a DJANGO model

  24. 24

    django upload to image model with foreign key to user

  25. 25

    Foreign key to different model field in django

  26. 26

    DJango queryset filter with a foreign key of a different model

  27. 27

    Auto-create model with foreign key when model is created - Django

  28. 28

    Django Model Property - Count foreign key for multiple instances of model

  29. 29

    Django model serialization returns only primary key for foreign key

HotTag

Archive