Я много читал о Django и, наконец, начал разрабатывать модели для проекта, который я изложил, но мне сложно понять ForeignKeys и как/когда их использовать. Я немного прочитал о работе с базами данных, чтобы лучше понять внешние ключи в целом, но без предварительного опыта работы с базами данных я все еще немного смущен.Должен ли я использовать ForeignKey в этой модели Django?
Я придумал пример ситуации, аналогичный проекту, над которым я работаю, и хотел бы знать, являются ли оба использования ForeignKey правильными, или я должен использовать OneToOneField или ManyToManyField вместо них.
В этой примерной ситуации я хотел бы, чтобы каждый мост имел несколько строителей, и каждый инструмент имел несколько разных пользователей (или строителей, которые были с ними опытными). Я бы не хотел, чтобы строитель работал на нескольких мостах одновременно (OneToOne ??). Тем не менее, я хотел бы, чтобы каждый строитель имел возможность иметь несколько инструментов, которыми они обладают (ManyToMany ??).
class Builder(models.Model):
first_name = models.CharField(max_length = 50)
class Bridge(models.Model):
bridge_name = models.CharField(max_length = 50)
builders = models.ForeignKey(Builder)
class Tool(models.Model):
tool_name = models.CharField(max_length = 50)
users = models.ForeignKey(Builder)
Из моего понимания, я могу получить все инструменты, оборудование строителей в views.py файла, хотя я еще не дошел до этой части развития еще, и хотел бы, чтобы обеспечить меня сильный модель, прежде чем дойти до этого.
Учитывая, как родовое и открытого состава этот вопрос может быть, в целом, я бы так же, как кто-то объяснить:
WHY each ForeignKey relationship in this example
model is either used correctly or incorrectly.
Если вы укажете внешний мост в мосту, вы на самом деле говорите, что мост принадлежит рабочему, а рабочий может иметь много разных мостов, если вы укажете в рабочем месте дополнительный ключ, то это означает, что рабочий имеет мост, но на мосту может быть много рабочих. Представьте, что это выпадающий список, если вы добавите отношение в рабочую модель, тогда вы выбираете для конкретного работника мост (в выпадающем списке), если вы укажете его наоборот, вы выбираете работника для моста. – petkostas