Как мне избежать потерянных внешних ключей в Django 2.1 - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть такие модели:

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_client и some_vendor сохранятся.

Но я хочу удалить job, сохранить some_client и удалить some_vendor.Это связано с тем, что у каждого задания может быть только один поставщик, а каждый поставщик может принадлежать только одному заданию.После удаления job some_vendor становится сиротой.

Я пытался использовать OneToOne отношение для vendor, но это не удаляет some_vendor, когда я удаляю job.

Я предполагаю, что моя проблемалибо неправильно используете ForeignKey для поставщика, либо неверные опции с ForeignKey.(Возможно, мне следует использовать related_name=, но я не вижу, что ставить после =.) Как удалить job и some_vendor?

...