Как правильно использовать отношение ManyToOne в Django? - PullRequest
0 голосов
/ 14 октября 2019

Я работаю на веб-сайте Job Portal и у меня возникли вопросы. Интересно, как правильно использовать отношения в моем случае?

Например:

  • У меня есть CompanyProfile, где у компании может быть несколько местоположений.

  • У меня есть работа, которая также может иметь несколько местоположений.

  • У меня естьУчащийся и учащийся могут составить биографические данные SkillSet, Education и Experience.

Вот что я имею сейчас: Класс CompanyProfile Класс местоположения, где CompanyProfile - это иностранный ключиз. Класс Job, где CompanyProfile и Location находится в предопределенном состоянии. Класс Skillset, Education и Experience все 3 из них имеют внешний ключ для CV.

CompanyProfile

class CompanyProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, related_name='company_profile')
    company_name = models.CharField(max_length=30)

Местоположение

class Location(models.Model):
    company = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE)
    address = models.CharField(max_length=100, null=True)
    zip_code = models.CharField(max_length=10, null=True)
    city = models.CharField(max_length=30, null=True)

CV

class Cv(models.Model):
    user = models.ForeignKey(StudentProfile, on_delete=models.CASCADE)

Образование, опыт и навыки все одинаковые

class Education(models.Model):
    cv = models.ForeignKey(Cv, on_delete=models.CASCADE)
    ...
    ... more fields.

Мой вопрос. Это правильный путь, или я должен поместить иностранный ключ в классе CompanyProfile в Location. И стоит ли мне вставлять в CV 3 иностранные ключи образования, опыта и навыков, или код выше верен? Я застрял на этом, потому что каждый раз, когда я мигрирую, я могу мигрировать, но иногда я получаю что-то вроде «Нет значения по умолчанию для ForeignKey, либо задайте значение по умолчанию NULL, либо измените модель».

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Ваша точка № 1 в порядке, размещение внешнего ключа компании на месте будет работать нормально в вашей ситуации. И для работы, у местоположения может быть много рабочих мест, и наоборот, работа может быть в нескольких местахПоэтому поместите ManyToManyField в модель Job для местоположения, как показано ниже

class Job(models.Model):
    locations = models.ManyToManyField(CompanyLocation)

да, вы можете использовать Foreignkey в модели образования набора навыков

Нет значения по умолчанию для ошибки ForeignKey при makemigrations - это то, что вам нужно понятьКогда вы определяете модель в первый раз и мигрируете, нет проблем с тем, является ли поле обязательным или нет, так как у него нет данных в базе данных. но когда вы добавляете обязательные поля в любую модель, которая уже была создана в БД, вы получаете эту ошибку. во время makemigrations django просит дать значения по умолчанию, чтобы он мог обновлять существующие строки этой таблицы в db.

0 голосов
/ 14 октября 2019

Для части Location и Company объект Location может иметь несколько Company, а компания может иметь несколько местоположений. Так что это отношения многие ко многим. Вы можете создать его напрямую или даже определить посредническую модель, такую ​​как Адрес. Вы должны определить ключевое слово through при определении модели, подробнее об этом здесь: https://docs.djangoproject.com/en/2.2/topics/db/examples/many_to_many/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...