Как разобрать сложный объект и массив по строке

Вы можете переопределить __init__() класса ModerSerializer,

class ChoiceSerializer(serializers.ModelSerializer):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if 'view' in self.context and self.context['view'].action == 'create':
            self.fields.update({"question": serializers.PrimaryKeyRelatedField(queryset=Question.objects.all())})

    class Meta:
        fields = '__all__'
        model = Choice
        depth = 1

Вы также можете ограничить настройки с помощью viewset actions, Подробнее читайте Действия Viewset

Примечание: я не тестировал решение, но он может хорошо работать

Ссылка: Django Rest Framework: динамически возвращать подмножество полей

1
задан Mina Pandey 19 January 2019 в 11:16
поделиться

1 ответ

Я думаю, это то, что вы ищете:

let a = {
  users: {
      user1: {
          name: 'Mina',
          interested: ['programming', 'makeup', 'get an answer'],
          complexArray: [['test1'], ['test2',{
              ultimateTest: ['success', 'more success']
          }]]
      },
      user2: {
          name: 'Ernesto',
          interested: ['give an answer']
      }
  }
};

function getContent(element, address) {

    let i, j;
    let x, y, z;
    let length1, length2;
    let currentPosition = element;

    address = address.split('.');
    length1 = address.length;

    for (i = 0; i < length1; i++) {
        x = address[i].match(/\[\d\]/g);
        if (x !== null) {
            // ARRAY TYPE ADDRESS
            y = address[i].replace(/\[\d\]/g, '');
            currentPosition = currentPosition[y];
            length2 = x.length;
            for (j = 0; j < length2; j++) {
                z = x[j].replace(/\D/g, '');
                z = parseInt(z);
                currentPosition = currentPosition[z];
            }
        } else {
            // OBJECT TYPE ADDRESS
            currentPosition = currentPosition[address[i]];
        }
    }

    return (currentPosition);

}

getContent(a, 'users.user1.interested[0]'); // OUTPUT: 'programming'
getContent(a, 'users.user2.name'); // OUTPUT: 'Ernesto'
getContent(a, 'users.user1.complexArray[1][1].ultimateTest[0]'); // OUTPUT: 'success'
getContent(a, 'users.user1.complexArray[1][1].ultimateTest[1]'); // OUTPUT: 'more success'
0
ответ дан Ernesto Stifano 19 January 2019 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: