BLNT
BLNT

Reputation: 136

How to filter manytomany field values in django restframework

I am trying to query values from model, I want to include manytomanyfield values in query but now I am getting some numbers instead of values, I am using modelviewset in views.py file.

I know what have done is wrong, How to do this in right way

models.py

class TrainingDetailsViewSet(viewsets.ModelViewSet):
    queryset = TrainingDetails.objects.all().order_by('Name')
    serializer_class = TrainingDetailsSerializer

views.py


class TrainingDetails(models.Model):
    Code = models.CharField(max_length=60)
    Name = models.CharField(max_length=60)
    TrainerName = models.ManyToManyField(TrainerDetails, blank=True, related_name='trainer')
    Agenda = models.FileField()
    Date = models.ManyToManyField(Date,blank=True, editable= True, related_name='date')
    Data = models.ManyToManyField(TrainingData, blank=True, related_name='data')
    
    def __str__(self):
        return self.Name

serializers.py

class TrainingDetailsSerializer(serializers.ModelSerializer):
    class Meta:
        model = TrainingDetails
        fields = ('Code', 'Name', 'TrainerName', 'Agenda' , 'Date' , 'Data' )

I'm getting in response,

[
    {
        "Code": "TRA123",
        "Name": "something",
        "TrainerName": [
            5,
            6
        ],
        "Agenda": "something",
        "Date": [
            2
        ],
        "Data": [
            2
        ]
    }
]

I want,

[
    {
        "Code": "TRA123",
        "Name": "something",
        "TrainerName": [
            'john' , 'james'
        ],
        "Agenda": "something",
        "Date": [
            '19/10/2020'
        ],
        "Data": [
            'something'
        ]
    }
]
``

Upvotes: 0

Views: 47

Answers (1)

adnanmuttaleb
adnanmuttaleb

Reputation: 3624

You are looking for the StringRelatedField, for example:

class TrainingDetailsSerializer(serializers.ModelSerializer):
    TrainerName = serializers.StringRelatedField(many=True)

    class Meta:
        model = TrainingDetails
        fields = ('Code', 'Name', 'TrainerName', 'Agenda' , 'Date' , 'Data' )

It should be noted that StringRelatedField looks for the __str__ of the related model, in your case the TrainerDetails.

Upvotes: 2

Related Questions