DJANGO: О связывании таблиц с ForeignKey - PullRequest
0 голосов
/ 25 марта 2020

Привет всем и спасибо за поддержку ЕЖЕДНЕВНО, правда. Теперь, клянусь, я не могу найти ответы между многими примерами и смежными темами:

У меня есть модель ТРАНСПОРТНЫЕ СРЕДСТВА и модель ШИНЫ . Оба будут связаны полем, PLATE;

class Vehicles(models.Model):
    Plate= models.CharField(max_length=10) 
    Quantity = models.IntegerField(default=0)
    Vendor = models.CharField(max_length=50)
    def __str__(self):
        return self.matricula  

class Tires(models.Model):
    Plate = models.ForeignKey(Vehicle, default=0, on_delete=models.SET_DEFAULT) # --- tires would be placed in an exisiting vehicle (plate), or , if not in use, "Tires.Plate=0"
    Number = models.IntegerField(unique=True)

Что мне нужно, эти два позволяют мне делать то, что они действительно делают или не делают:

  • Добавление записей в транспортные средства ......... ........ ДА
  • Добавление шин с предварительно определенными номерами дисков в раскрывающемся меню из Транспортных средств. Таблички .................... ДА, ПРОВЕРИТЬ
  • Добавление шин с номером пластины = 0, указывающим, что шина не используется ни одним транспортным средством ....... НЕТ, НЕ ПРОВЕРЕНО; меню предлагает только существующие таблички в "Vehicles.Plate": даже если я попытался добавить значение DEFAULT.
  • Удаление регистров из ШИН ...... ... CHECK
  • Удаление регистров из транспортных средств ....... НЕ ПРОВЕРЕНО; делая это вместо того, чтобы присвоить соответствующему значению Tires.Plate значение по умолчанию 0, как я ожидал от "...ForeignKey(Vehicle, default=0, on_delete=models.SET_DEFAULT)", я получаю «Сбой ограничения FOREIGN KEY» ошибка.

Так что, действительно, удаляя транспортное средство, я вызываю ошибку целостности - я прочитал определения и логи c иностранных ключей, 1-клавишные, извините, но, на самом деле, я не читал ни одного примера или учебника в общих чертах описывается этот случай c.

Можете ли вы дать мне идею, пожалуйста, посмотрите, пожалуйста?

1 Ответ

0 голосов
/ 25 марта 2020

Вы должны использовать null вместо 0 для внешнего ключа по умолчанию, если ему не нужно иметь значение

Plate = models.ForeignKey(Vehicle, null=True, blank=True, on_delete=models.SET_NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...