我有2个模型:Responsavel和Filho。 Responsavel可能有很多Filhos,因此在我的admin.py文件中,我有以下内容:
class FilhoInline(admin.TabularInline):
model = Filho
@admin.register(Responsavel)
class ResponsavelAdmin(admin.ModelAdmin):
inlines = [
FilhoInline
]
def save_model(self, request, obj, form, change):
obj.user.is_pai = True
obj.user.save()
super().save_model(request, obj, form, change)
有了这个,我可以在同一屏幕上插入Responsavel和Filho,更加有用。因此,在我的models.py中,我有:
class Responsavel(models.Model):
user = models.OneToOneField(TogetherUser, verbose_name="Usuário", primary_key=True, on_delete=models.CASCADE)
cpf = models.CharField(max_length=11, unique=True)
telefone1 = models.CharField(max_length=50, blank=True, null=True)
telefone2 = models.CharField(max_length=50, blank=True, null=True)
telefone3 = models.CharField(max_length=50, blank=True, null=True)
def __str__(self):
return self.user.username
class Meta:
verbose_name_plural = "Responsáveis"
verbose_name = "Responsável"
class Filho(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
nome = models.CharField(max_length=100)
data_nascimento = models.DateField(verbose_name="Data de Nascimento")
genero = models.CharField(max_length=1, choices=Genero.choices(), verbose_name="Gênero")
responsavel = models.ForeignKey(Responsavel, on_delete=models.PROTECT, verbose_name="Responsável")
def __str__(self):
return self.nome
class Meta:
verbose_name_plural = "Filhos"
当我尝试在Admin Django中保存Responsavel和您的“ Filhos”时,出现以下错误:
IntegrityError at /admin/core/responsavel/add/
FOREIGN KEY constraint failed
但是,如果我添加没有任何“ Filhos”的Responsavel,一切正常。
修改1: 我将models.PROTECT更改为models.CASCADE,它可以正常工作,
responsavel = models.ForeignKey(Responsavel, on_delete=models.PROTECT, verbose_name="Responsável")
到
responsavel = models.ForeignKey(Responsavel, on_delete=models.CASCADE, verbose_name="Responsável")
我不知道为什么如果这是“ on_delete”而不是“ on_update”或其他东西,为什么这会影响我的保存方法。