Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React/Django:如何获取React中models.TextChoices的标签_Django_Reactjs_Django Models - Fatal编程技术网

React/Django:如何获取React中models.TextChoices的标签

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

我在Django有以下型号:

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()