Как передать вложенный объект foreignkey в другую модель?
Я в тупике уже несколько дней; надеюсь, кто-нибудь из вас, волшебники, сможет вытащить меня из этого затруднительного положения...
У меня есть модель под названием ExtraSlot
class ExtraSlot(models.Model):
.......
employee = models.ForeignKey(Employee, on_delete = models.CASCADE, related_name="employee")
это сериализатор
class ExtraSlotSerializer(serializers.ModelSerializer):
employee = EmployeeSerializer(many=True) <-- If I add this it tries to iterate through and errors
out
class Meta:
model = ExtraSlot
fields = (..... 'employee')
fields = ('__all__') <- also used this to no avail
depth = 3
Я пытаюсь добавить сотрудника в модель; в панели администратора все в порядке. Объект сотрудника можно выбрать. DRF api ничего не показывает; я читал, что ввод списка HTML не поддерживается, что нормально, но поле сотрудника в качестве ввода (даже в необработанном формате) не отображается вообще.
Employee extends User (AbstractBaseUser) - вот ошибка списка, если я попробую many=true и передам весь сериализатор.
TypeError: 'Employee' object is not iterable
(если я попробую передать EmployeeSerializer с many=True; что имеет смысл.)
employee = EmployeeSerialzer()
- передает весь объект, как будто я хочу создать новый?!
Я хочу позволить пользователю подписать сотрудника на экстраслот.
Помогите, пожалуйста!
Разобрался...
class ExtraSlotSerializer(serializers.ModelSerializer):
class Meta:
model = ExtraSlot
fields = ('__all__')
depth = 3 <---
Проблема связана с параметром depth. При его применении даже при глубине 1 происходит обход всей глубины отношений. Мы просим выполнить итерацию по любому вложенному объекту и вернуть требуемый уровень глубины.
Поэтому ForeignKey/Many-to-one расширяет весь объект, не позволяя передать идентификатор первичного ключа (posted).
Когда мы удаляем параметр глубины, поле для идентификатора объекта становится доступным и может быть использовано.
Надеюсь, это поможет кому-нибудь в будущем.