Django - ошибка при сохранении объекта в `TabularInline`, когда первичный ключ является строкой и доступен только для чтения
У меня есть следующие модели:
class Parent(models.Model):
name = models.CharField(max_length=255)
class Child(models.Model):
id = models.CharField(primary_key=True, max_length=255)
name = models.CharField(max_length=255)
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
Модель Child
имеет первичный ключ (ID) типа string
.
Теперь я пытаюсь отобразить детей в TabularInline
inline внутри Parent
формы администратора, и я хочу, чтобы поле ID было доступно только для чтения:
class ChildMemberLinkAdmin(admin.TabularInline):
model = Child
extra = 0
fields = ("id", "name")
readonly_fields = ("id",)
@admin.register(Parent)
class ParentAdmin(admin.ModelAdmin):
fields = ("name",)
inlines = (ChildMemberLinkAdmin,)
Я создал родителя и ребенка в Django Shell и проверил, что у каждого из них есть ID и имя. Они правильно отображаются в Django Admin. Однако, когда я нажимаю кнопку Save
в форме Parent
(даже ничего не меняя), я получаю ошибку "Please correct the errors below.". При отладке я заметил, что дочерний id
почему-то отсутствует, что странно, потому что у моего Child
экземпляра уже есть ID, который отображается как readonly в TabularInline
в форме.
Когда я удаляю id
из ChildMemberLinkAdmin.readonly_fields
все работает правильно.
Есть идеи, как это исправить?
Я использую последнюю версию Django: 3.2