Вы можете переопределить __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: динамически возвращать подмножество полей
Я думаю, это то, что вы ищете:
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'