Как я могу объединить эти два поля модели в одно? - PullRequest
0 голосов
/ 18 июня 2019

Допустим, у меня есть эта модель:

class ParticipationCount(models.Model):

    female = models.PositiveIntegerField()
    male   = models.PositiveIntegerField()

Я бы хотел навсегда объединить их в:

people = models.PositiveIntegerField() 

Я бы хотел, чтобы все существующие мужчины и женщины были объединены в "людей". Поскольку мы уже используем эту модель и имеем данные.

Вот админ:

class ParticipationCountAdmin(admin.ModelAdmin):
    list_display = ("shift_datetime", "shift", "location", "female", "male")
    search_fields = ["location", "female", "male"]
    form = ParticipationCountForm

Итак, в целом, как мне объединить "мужской" и "женский" в одно поле, и продолжать использовать это поле с этого момента , потому что мы больше не ссылаемся на гендеры.

1 Ответ

2 голосов
/ 18 июня 2019

Чтобы уточнить комментарий Даниэля Роземана, вы можете сделать это следующим образом:

ШАГ 1 : добавьте поле people к вашей модели, например, так:

class ParticipationCount(models.Model):
    female = models.PositiveIntegerField()
    male   = models.PositiveIntegerField()
    people = models.PositiveIntegerField() 

Затем выполните команды python manage.py makemigrations и python manage.py migrate

ШАГ 2 : Затем создайте свой собственный файл миграции:

def set_people(apps, schema_editor):
    ParticipationCount = apps.get_model('your_app', 'ParticipationCount')
    for row in ParticipationCount.objects.all():
        row.people = row.male + row.female
        row.save()

class Migration(migrations.Migration):

    dependencies = [
        ('your_app', '...'),  # fill in your previous migration number
    ]

    operations = [
        migrations.RunPython(set_people),
    ]

Затемвыполните команду python manage.py migrate

ШАГ 3 : Удалите поля male и female, например:

class ParticipationCount(models.Model):
    people = models.PositiveIntegerField() 

Затем выполните команды python manage.py makemigrations и python manage.py migrate


Для получения дополнительной информации о написании собственных миграций ознакомьтесь с документами .

...