如何在Django 2.1中避免孤立的外键

时间:2018-12-22 16:44:16

标签: django-models foreign-keys

我有这样的模型:

class Job(models.Model):
    ref = models.CharField(max_length=13)
    client = models.ForeignKey(Client, on_delete=models.CASCADE)
    vendor = models.ForeignKey(Vendor, on_delete=models.SET_NULL, null=True,blank=True)

class Client(models.Model):
    name = models.CharField(max_length=100)
    phone = models.CharField(max_length=13, null=True, blank=True)

class Vendor(models.Model):
    name = models.CharField(max_length=100)
    phone = models.CharField(max_length=13, null=True, blank=True)

我知道我可以创建一个Job实例(实际上是通过管理站点,但等效):

job= Job.objects.create(
                        ref='1',
                        client=Client(name='some_client'),
                        vendor=Vendor(name='some_vendor',phone='01245 678 897)

我知道:

i)如果我删除some_client,那么job也将被删除。

ii)如果我删除some_vendor,则job仍然存在,但现在job.vendor = null

iii)如果我删除job,则some_clientsome_vendor将保留。

但是我想删除job,保留some_client并删除some_vendor。 这是因为每个作业只能有一个供应商,每个供应商只能属于一个作业。 job删除后,some_vendor成为孤立的。

我尝试为OneToOne使用vendor关系,但是在删除some_vendor时并没有删除job

我猜测我的问题是不正确地为供应商使用了ForeignKey或对ForeignKey使用了错误的选项。 (也许我应该使用related_name=,但看不到放在=之后的内容。) 如何删除工作和some_vendor?

0 个答案:

没有答案