Расширение базы данных Django динамически? - PullRequest
0 голосов
/ 28 мая 2018

Я создаю приложение в Django, которое позволяет пользователям добавлять элементы в свой профиль, такие как предыдущий опыт работы.Проблема, с которой я сталкиваюсь, заключается в том, что разные пользователи имеют разный опыт.Мой текущий подход заключается в том, чтобы иметь модель, которая выглядит примерно так:

class MyModel(models.Model):
    owner = models.ForeignKey(User, related_name='modelowner', on_delete=models.CASCADE)
    experience1_company = models.TextField(null=True, blank=True)
    experience2_company = models.TextField(null=True, blank=True)
    experience3_company = models.TextField(null=True, blank=True)
    ...
    experience10_company  = models.TextField(null=True, blank=True)
    experience1_title = models.TextField(null=True, blank=True)
    experience2_title = models.TextField(null=True, blank=True)
    experience3_title = models.TextField(null=True, blank=True)
    ...
    experience10_title  = models.TextField(null=True, blank=True)

В моей нынешней модели пользователь может ввести до 10 предыдущих ролей, что охватывает около 95% + пользователей.Однако очевидно, что это проблема, когда каждый предыдущий опыт, который вводит пользователь, имеет пять других атрибутов (дата начала, дата окончания, заголовок, описание, местоположение).это означает, что в итоге модель содержит около 60 атрибутов ... и если мне нужно добавить что-то новое, мне нужно добавить это 10 раз.

Вопрос: есть ли способ динамически создавать новые атрибуты моделидля пользователей, которые имеют более X количества опытов или лучше всего, чтобы каждый из них был явно определен в модели и имел практическое ограничение (например, вы можете ввести только до 10)?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вам нужна модель для хранения информации об опыте работы, такой как (job_title, company_name, start_date, end_date, обязанности) и связать эту модель опыта работы с профилем пользователя.что-то вроде ниже:

class WorkExperience(models.Model):
    person = models.ForeignKey(User, blank=True, null=True)
    job_title = models.CharField(max_length=125)
    company_name = models.CharField(max_length=125)
    start_date = models.DateField()
    end_date = models.DateField()
    duties_description = models.CharField(max_length=125)

Таким образом, ваше приложение может вместить любое количество WorkExperience на пользователя

0 голосов
/ 28 мая 2018

Вы должны изменить свою модель, чтобы представить один опыт, подобный следующему:

class Experience(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    company = models.TextField(null=True, blank=True)
    title = models.TextField(null=True, blank=True)

    # and as much other fields as you like:
    start_date = models.DateField()
    end_date = models.DateField()
    description = models.TextField(null=True, blank=True)
    location = models.TextField(null=True, blank=True)

Теперь вы можете создавать неограниченное количество Experience экземпляров для каждого пользователя и получать их с помощью:

user = User.objects.get(username='bob')

Experience.objects.filter(owner=user)

или

user.experience_set.all()

Документация по этой теме находится в Выполнение запросов - следующие отношения "назад"

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