gpt4 book ai didi

django - 删除用作外键的对象

转载 作者:行者123 更新时间:2023-12-04 10:37:35 26 4
gpt4 key购买 nike

我有下一个模型:

class Target(models.Model):
name = models.CharField(max_length=100, blank=False)


class SubTarget(models.Model):
target = models.ForeignKey(Target, related_name='sub_targets')
name = models.CharField(max_length=100, blank=True, null=True, default='')

例如,我运行下一个代码:
target = Target(name='test-target')
target.save()
sub_target = SubTarget(name='test-sub-target, target=target)
sub_target.save()

所以现在我有带有外键的 sub_target 对象。

我的目标序列化程序如下所示:
class TargetSerializer(serializers.ModelSerializer):
class Meta:
model = Target
fields = ('id', 'name', 'sub_targets')
depth = 1
read_only_fields = ('sub_targets',)

和适当的观点:
class TargetDetail(generics.RetrieveUpdateDestroyAPIView):
model = Target
serializer_class = TargetSerializer

所以,没有什么能阻止我删除 目标 使用外键创建对象。而且,这个操作删除还涉及到 sub_target 目的。我怎样才能避免这种行为?

最佳答案

我不确定,但我认为您是在问如何在删除 Target 对象时防止删除 SubTarget 对象。默认情况下,Django 模拟 ON DELETE CASCADE。您可以使用 on_delete 关键字控制此行为。

所以:

class Target(models.Model):
name = models.CharField(max_length=100, blank=False)


class SubTarget(models.Model):
target = models.ForeignKey(Target, related_name='sub_targets',
null=True, on_delete=models.SET_NULL)
name = models.CharField(max_length=100, blank=True, null=True, default='')

Documentation

关于django - 删除用作外键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com