Полученные объекты из django отображаются в виде чисел/идей

Я использую React frontend и Django backend. Мне удалось сделать так, что пользователи могут добавлять крыс в свой аккаунт, однако когда я хочу получить подробную информацию о крысах, информация отображается в виде чисел, я предполагаю, что это id детали?

Вот пример. Вот что получается, если просмотреть одну из крыс фронтально:

User: 12, Rat Name: newrat Rat Body colour: 3, Eye colour: 3

Как видите, вы получаете id (?) каждой детали, кроме имени крысы. Она принадлежит пользователю с id 12, и создан 3-й цвет тела, и т.д.

Вот мои модели:

class EyeColour(models.Model):
    name = models.CharField(max_length=255)
    
    def __str__(self):
        return self.name
    
class BodyColour(models.Model):
    name = models.CharField(max_length=255)
    
    def __str__(self):
        return self.name

class rat(models.Model):
    name = models.CharField(max_length=132, null =True)
    body_colour = models.ManyToManyField(BodyColour, related_name='bodycolour')
    eye_colour = models.ManyToManyField(EyeColour, related_name='eyecolour')
    user = models.ForeignKey(User, on_delete=models.CASCADE, null = True)
    def __str__(self):
        return self.name

Сериализаторы:

class EyeColourSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = EyeColour
        fields = '__all__' 
        
class BodyColourSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = BodyColour
        fields = '__all__' 

class RatSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = rat
        # fields = '__all__' 
        exclude = ['bio']
        # read_only_fields = ['eye_colour', 'body_cdolour']
        expandable_fields = {
            'EyeColour': ('accounts.EyeColourSerializer', {'many': False}),
            'Image': ('accounts.ImageSerializer', {'many': False}),
        }

и мнения:

class ratViewset(FlexFieldsMixin, ReadOnlyModelViewSet):

    serializer_class = RatSerializer
    queryset = rat.objects.all()

Наконец, это часть файла viewRats.jsx, к которому вы обращаетесь для просмотра каждой крысы:

class viewRat extends Component {
  constructor(props) {
    super(props);

    this.state = {
      id: this.props.match.params.id,
      rat: {},
    };
  }

  componentDidMount() {
    RatStuff.getRatById(this.state.id).then((res) => {
      this.setState({ rat: res.data });
    });
  }

....

<div className="row">
              <label> User: </label>
              <div> {this.state.rat.user}</div>
            </div>
            <div className="row">
              <label> Rat Name: </label>
              <div> {this.state.rat.name}</div>
            </div>
            <div className="row">
              <label> Rat Body colour: </label>
              <div> {this.state.rat.body_colour}</div>
            </div>
            <div className="row">
              <label> Eye colour: </label>
              <div> {this.state.rat.eye_colour}</div>
            </div>

Я совсем новичок в этом деле. Что я делаю, что заставляет его отображаться как числа/идентификатор каждой вещи?

В сериализаторе добавьте поле сериализатора с атрибутом source для пользователя. для полей many to many нужно установить many=True, что вернет список всех связанных сериализованных объектов

class EyeColourSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = EyeColour
        fields = '__all__' 
    
class BodyColourSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = BodyColour
        fields = '__all__' 

class RatSerializer(FlexFieldsModelSerializer):
    user         = serializers.CharField(source='user.username')
    body_colour  = BodyColourSerializer(many=True)
    eye_colour   = EyeColourSerializer(many=True)
    class Meta:
        model = rat
        # fields = '__all__' 
        exclude = ['bio']
        # read_only_fields = ['eye_colour', 'body_cdolour']
        
Вернуться на верх