React/Django:如何获取React中models.TextChoices的标签
我在Django有以下型号:React/Django:如何获取React中models.TextChoices的标签,django,reactjs,django-models,Django,Reactjs,Django Models,我在Django有以下型号: class Expense(models.Model): class ExpenseTypes(models.TextChoices): FOOD = 'FOOD', 'Food' HOUSE = 'HOUS', 'Home' SPORT = 'SPRT', 'Sport and exercices' TRANSPORT = 'MOVE', 'Transportation' E
class Expense(models.Model):
class ExpenseTypes(models.TextChoices):
FOOD = 'FOOD', 'Food'
HOUSE = 'HOUS', 'Home'
SPORT = 'SPRT', 'Sport and exercices'
TRANSPORT = 'MOVE', 'Transportation'
EVERYDAY = 'EVER', 'Everyday Expenses'
ENTERTAINMENT = 'ENTE', 'Entertainment'
CLOTHING = 'CLOT', 'Clothes'
INVESTMENTS = 'INVE', 'Investments'
EDUCATION = 'EDUC', 'Education'
SAVING = 'SAVE', 'Saving'
HOLIDAYS = 'HOLI', 'Holidays'
DEBT = 'DEBT', 'Debt'
TAXES = 'TAXS', 'Taxes'
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=32)
amount = models.DecimalField(max_digits=10, decimal_places=2)
expense_type = models.CharField(
max_length=4,
choices=ExpenseTypes.choices,
default=ExpenseTypes.FOOD,
)
time = models.DateTimeField(default=timezone.now)
使用简单的序列化程序和视图:
class ExpenseSerializer(serializers.ModelSerializer):
class Meta:
model = Expense
fields = ('id', 'user', 'title', 'amount', 'expense_type', 'time')
class ExpenseViewSet(viewsets.ModelViewSet):
queryset = Expense.objects.all()
serializer_class = ExpenseSerializer
authentication_classes = (TokenAuthentication, )
permission_classes = (IsAuthenticated,)
在“获取数据时作出反应”中:
const [expenses, setExpenses] = useState<Expense[]>([]);
useEffect(() => {
function formatExpense(expense: any): Expense {
return {
id: expense.id,
title: expense.title,
amount: expense.amount,
user: expense.user,
type: expense.expense_type,
time: new Date(expense.time),
};
}
async function loadExpenses() {
try {
const response = await fetch("http://127.0.0.1:8000/api/Expenses/", {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'xxx'
}
})
const Expenses = await response.json()
setExpenses(Expenses.map((expense: any) => formatExpense(expense)));
} catch (err) {
console.log(err);
};
}
loadExpenses();
}, [])
const[expenses,setExpenses]=useState([]);
useffect(()=>{
函数格式费用(费用:任意):费用{
返回{
id:expense.id,
标题:费用。标题,
金额:费用。金额,
用户:expense.user,
类型:expense.expense\u类型,
时间:新日期(费用。时间),
};
}
异步函数loadExpenses(){
试一试{
const response=等待获取(“http://127.0.0.1:8000/api/Expenses/", {
方法:“GET”,
标题:{
“内容类型”:“应用程序/json”,
“授权”:“xxx”
}
})
const Expenses=wait response.json()
setExpenses(Expenses.map((费用:任意)=>formatExpense(费用));
}捕捉(错误){
控制台日志(err);
};
}
装载费用();
}, [])
我发现对于费用类型,我只有“钥匙”(食物、住房、食物等),没有说明。我想能够获取这些描述(食物,家庭,运动和锻炼,…),这是能够显示在我的前端。
如何做到这一点
提前感谢我通过将序列化程序更改为:
class ExpenseSerializer(serializers.ModelSerializer):
expense_type = serializers.SerializerMethodField()
class Meta:
model = Expense
fields = '__all__'
def get_expense_type(self, obj):
return obj.get_expense_type_display()