Django Rest framework: Relate 2 tables

Issue

I’m new at python and Django. I have a problem relate 2 tables

Participants Model

lass Participant(models.Model):

id = UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
first_name = CharField(max_length=255)
last_name = CharField(max_length=255)
current_employing_country = CharField(max_length=255)
current_payroll_country = CharField(max_length=255)
# locations = ManyToManyField(Location)

Location Model

class Location(models.Model):

participant_id = ForeignKey(Participant, on_delete=CASCADE,related_name="locations")
start_date = DateField()
end_date = DateField()
country = CharField(max_length=255)
region = CharField(max_length=255)
tax_policy = CharField(max_length=255, null=True)

Serializers

class ParticipantSerializer(serializers.ModelSerializer):
class Meta:
    model = Participant
    fields = "__all__"

class LoactionSerializer(serializers.ModelSerializer):
# participant_id = serializers.PrimaryKeyRelatedField(queryset=Participant.objects.all())

class Meta:
    model = Location
    tax_policy = serializers.CharField(allow_blank=True, allow_null=True)
    fields = "__all__"

Trying to get all participants with property locations that contain array of all the locations that relate to the participant id like Participant.objects.all().prefetch_related("locations")

EXAMPLE-

[
{
    "id": "a9a6c412-91c2-414a-97dc-8f8a4c6bdfcd",
    "first_name": "test",
    "last_name": "test",
    "nationality": "test",
    "current_employing_country": "israel",
    "current_payroll_country": "dsadsa",
    "locations": [ {
        "id": 1,
        "start_date": "2021-10-10",
        "end_date": "2021-11-11",
        "country": "isreal",
        "region": "iseali",
        "tax_policy": "N/A",
        "participant_id": "a9a6c412-91c2-414a-97dc-8f8a4c6bdfcd"
       },
       {
        "id": 2,
        "start_date": "2021-10-10",
        "end_date": "2021-11-11",
        "country": "adsdsa",
        "region": "iseali",
        "tax_policy": "N/A",
        "participant_id": "a9a6c412-91c2-414a-97dc-8f8a4c6bdfcd"
    }]
}

]

Solution

It just like below.

class LocationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Location
        fields = "__all__"


class ParticipantSerializer(serializers.ModelSerializer):
    locations = LocationSerializer(many=True)

    class Meta:
        model = Participant
        fields = (
            "id",
            "first_name",
            "last_name",

            "locations",
        )

Answered By – Mahrus Khomaini

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published