我有以下型号
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获取对象,它可以正常工作。数据库中还有一个pk 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)
答案 0 :(得分:3)
您的主键不是字符串,而是一个int。
username = models.OneToOneField(Person, primary_key=True)
username
这里不是CharField
而是OneToOneField
,这意味着与Person
对象模型的关系,这意味着包含此人行的ID的字段人员表中的实例。
您可能希望以这种方式重命名:
person = models.OneToOneField(Person, primary_key=True)
并且,假设您的Person
对象具有username
属性,您可以通过以下方式删除您的员工:
s = Staff.objects.get(person__username='lacc1').delete()
但是,您必须知道这意味着JOIN
字段上的person_id
和工作人员username
字段上的过滤器,该字段可能未编入索引。它会比你想象的慢,但我怀疑它应该有任何麻烦。