У меня есть две модели Расписание и Сотрудник Теперь в моем случае использования Я хочу автоматически сохранить поле employee расписания с использованием execute_create, но API возвращает ошибку "ValueError at / api / timesheet_entry / \ nНе назначать \",,]> \ ": \" Timesheet.employee \ "должен быть экземпляром \" Employee \ ".
Я пытался сохранить поле сотрудника расписания в поле логин сотрудника, используя id .
ниже приведена информация о моделях, сериализаторе и наборах.
class Timesheet(models.Model):
start_date = models.DateTimeField(verbose_name="Start Date", null=True, blank=True, default=None, editable=True, help_text="", unique=False, db_index=False,)
end_date = models.DateTimeField(verbose_name="End Date", null=True, blank=True, default=None, editable=True, help_text="", unique=False, db_index=False,)
employee = models.ForeignKey('Employee', on_delete=models.PROTECT, related_name="timesheet_entry_employee",
verbose_name="Employee", null=True, blank=True, editable=True, unique=False)
comment = models.CharField(verbose_name="Comment", null=True, blank=True, default=None, editable=True, max_length=255,)
total_hours = models.DecimalField(verbose_name="Total Hours", null=True, blank=True, default=0.00, max_digits=19, decimal_places=2,)
и
class Employee(models.Model):
name = models.CharField(verbose_name="Name", max_length=255,)
login = models.ForeignKey(User, on_delete=models.PROTECT, related_name="employee_login",
verbose_name="Login", editable=True)
hourly_cost = models.DecimalField(verbose_name="Hourly Cost", null=False, blank=False, editable=True, max_digits=19, decimal_places=2,)
charge_out_rate = models.DecimalField(verbose_name="Charge Out Rate", null=False, blank=False, max_digits=19, decimal_places=2,)
и в сериализаторе
class TimesheetEntrySerializer(WritableNestedModelSerializer):
employee = PrimaryKeyRelatedField(many=False, read_only=False, allow_null=True, queryset=models.Employee.objects.all())
viewset'sвыполнить создание
def perform_create(self, serializer):
user_id = self.request.user
employee_user = models.Employee.objects.get(employee__login=user_id)
return serializer.save(employee=employee_user)