Вы можете делать то, что хотите, с помощью заводской функции, хотя не так просто получить внутренние переменные (атрибуты) так, как вы хотите:
def factory(FIELDname):
class FIELDSerializer:
class Meta:
model = None
fields = {FIELDname}
settatr(FIELDSerializer, FIELDname, serializers.CharField(source=f'get_{FIELDname}_display', required=False))
return FIELDSerializer
CategorySerializer = factory('category')
StateSerializer = factory('state')
NameSerializer = factory('name')
setattr
позволяет нам установить имя атрибута в строку FIELDname
. (Спасибо @ Code-Apprentice и @juanpa.arrivillaga за эту идею.)
Я не знаю, есть ли какой-нибудь простой способ избежать повторения имя поля и имя нужного класса, когда вы вызываете фабрику, не используя что-то вроде exec
(что совершенно законно, но обычно оставляет программистов с неприятным вкусом во рту).