Django удалить объект, который имеет строку в качестве первичного ключа
У меня есть следующая модель
class Staff(models.Model):
username = models.OneToOneField(Person, primary_key=True)
room = models.CharField(blank=True, max_length=12)
Когда я запускаю следующий код, я получаю ошибку Truncated incorrect DOUBLE value: 'lacc1'
s = Staff.objects.get(pk = 'lacc1').delete()
Я предполагаю, что это как-то связано с тем, что первичный ключ является строкой. Кто-нибудь знает, как я могу решить эту проблему.
Это только на удаляет. Если я просто хочу получить объект с помощью get или filter, он работает нормально. В БД также есть объект с пк lacc1
так что это не проблема.
РЕДАКТИРОВАТЬ
Персональный класс
class Person(models.Model):
username = models.CharField(primary_key=True, max_length=12)
title = models.CharField(max_length=25)
forenames = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
1 ответ
Ваш первичный ключ не строка, это int.
username = models.OneToOneField(Person, primary_key=True)
username
здесь нет CharField
но OneToOneField
, означая отношение к Person
объектная модель, означающая поле, содержащее идентификатор строки этого экземпляра лица в таблице персонала.
Вы можете переименовать его следующим образом:
person = models.OneToOneField(Person, primary_key=True)
И, принимая ваши Person
объект имеет username
атрибут, вы можете удалить свой персонал следующим образом:
s = Staff.objects.get(person__username='lacc1').delete()
Тем не менее, вы должны знать, что это подразумевает JOIN
на person_id
поле и фильтр на посох username
поле, которое, вероятно, не проиндексировано. Это будет медленнее, чем вы ожидали, но я сомневаюсь, что это вызовет какие-либо проблемы.