重命名序列化器和表单中的模型字段-Django

时间:2019-02-18 07:31:31

标签: django django-models django-forms django-rest-framework django-views

我想更改字段名称。在我的模型中,字段名称以前缀timesheet开头。当我使用api时,我必须使用timesheet前缀。我想删除该前缀,而保留jobsclock_in_dateclock_out_date ....如何重命名字段名称,以便从api正文发送数据时应包含无时间表的名称前缀

class TimesheetSerializer(serializers.ModelSerializer):

    timesheet_hours = TimesheetHourSerializer(many=True, read_only=True)

    class Meta:
        model = TimesheetEntry
        fields = [
            'id',
            'timesheet_jobs',
            'timesheet_clock_in_date',
            'timesheet_clock_in_time',
            'timesheet_clock_out_date',
            'timesheet_clock_out_time',
            'timesheet_note',
            'timesheet_hours',
        ]

Models.py

class TimesheetEntry(models.Model):
    timesheet_users = models.ForeignKey(User, on_delete=models.CASCADE,related_name='timesheet_users')
    timesheet_jobs = models.ForeignKey(Jobs, on_delete=models.CASCADE,related_name='timesheet_jobs', blank=True, null=True)
    timesheet_clock_in_date = models.DateField()
    timesheet_clock_in_time = models.TimeField()
    timesheet_clock_on = models.DateTimeField(auto_now_add=True)
    timesheet_clock_in_by = models.ForeignKey(User, on_delete=models.CASCADE,related_name='timesheet_user_clock_in_by')
    timesheet_clock_out_date = models.DateField(blank=True, null=True)
    timesheet_clock_out_time = models.TimeField(blank=True, null=True)

1 个答案:

答案 0 :(得分:4)

class TimesheetSerializer(serializers.ModelSerializer):
    timesheet_hours = TimesheetHourSerializer(many=True, read_only=True)
    jobs = serializers.CharField(source='timesheet_jobs')

    class Meta:
        model = TimesheetEntry
        fields = [
            'id',
            'jobs',
            .......
        ]

您可以简单地使用它。这同样适用于写操作