장고 - South를 사용하여 모델 필드의 이름을 변경하는 방법
모델의 특정 필드 이름을 변경하고 싶습니다.
class Foo(models.Model):
name = models.CharField()
rel = models.ForeignKey(Bar)
다음 항목으로 변경해야 합니다.
class Foo(models.Model):
full_name = models.CharField()
odd_relation = models.ForeignKey(Bar)
South를 사용하여 이것을 하는 가장 쉬운 방법은 무엇입니까?
기능을 사용할 수 있습니다.
class Migration:
def forwards(self, orm):
# Rename 'name' field to 'full_name'
db.rename_column('app_foo', 'name', 'full_name')
def backwards(self, orm):
# Rename 'full_name' field to 'name'
db.rename_column('app_foo', 'full_name', 'name')
의 첫 번째 논거는db.rename_column
테이블명이므로 Django가 테이블명을 작성하는 방법을 기억해야 합니다.
Django는 모델 클래스의 이름과 이를 포함하는 앱에서 데이터베이스 테이블의 이름을 자동으로 가져옵니다.모델의 데이터베이스 테이블 이름은 모델의 "앱 레이블"(관리에서 사용한 이름)에 가입하여 구성됩니다.py startapp - 모델 클래스 이름에 밑줄 포함.
프로젝트와 같이 여러 단어로 된 카멜 대문자 모델 이름이 있는 경우항목, 테이블 이름은 다음과 같습니다.app_projectitem
(즉, 밑줄은 삽입되지 않습니다.project
그리고.item
낙타상자임에도 불구하고)
제가 하는 일은 다음과 같습니다.
- 모델에서 열 이름을 변경합니다(이 예에서는 다음과 같습니다).
myapp/models.py
) - 달려.
./manage.py schemamigration myapp renaming_column_x --auto
메모renaming_column_x
임의의 이름을 지정할 수 있습니다.이거는 이행 파일에 알기 쉬운 이름을 붙이는 방법입니다.
이렇게 하면 다음과 같은 파일이 생성됩니다.myapp/migrations/000x_renaming_column_x.py
그러면 이전 열이 삭제되고 새 열이 추가됩니다.
이 파일의 코드를 수정하여 마이그레이션 동작을 단순 이름 변경으로 변경합니다.
class Migration(SchemaMigration):
def forwards(self, orm):
# Renaming column 'mymodel.old_column_name' to 'mymodel.new_column_name'
db.rename_column(u'myapp_mymodel', 'old_column_name', 'new_column_name')
def backwards(self, orm):
# Renaming column 'mymodel.new_column_name' to 'mymodel.old_column_name'
db.rename_column(u'myapp_mymodel', 'new_column_name', 'old_column_name')
db.rename 컬럼에 대해서는 몰랐습니다만, 이전에는 새로운 컬럼을 하나의 스키마마이그레이션으로 추가하고 새로운 필드에 값을 이동하기 위한 데이터마이그레이션을 작성한 후 오래된 컬럼을 삭제하는 두 번째 스키마마이그레이션을 작성했습니다.
Django 1.7은 이행을 도입하여 이행을 관리하기 위해 추가 패키지를 설치할 필요가 없습니다.
모델 이름을 변경하려면 먼저 빈 마이그레이션을 생성해야 합니다.
$ manage.py makemigrations <app_name> --empty
그런 다음 다음과 같이 마이그레이션 코드를 편집해야 합니다.
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('yourapp', 'XXXX_your_previous_migration'),
]
operations = [
migrations.RenameField(
model_name='Foo',
old_name='name',
new_name='full_name'
),
migrations.RenameField(
model_name='Foo',
old_name='rel',
new_name='odd_relation'
),
]
그런 다음 실행해야 합니다.
$ manage.py migrate <app_name>
모델을 변경하고 실행하기만 하면 됩니다.makemigrations
1.9로
Django는 사용자가 단일 필드를 삭제 및 생성한 것을 자동으로 감지하고 다음과 같이 묻습니다.
Did you rename model.old to model.new (a IntegerField)? [y/N]
'예'라고 대답하면 적절한 이행이 작성됩니다.마술.
- 더하다
south
프로젝트 설정 파일에 설치된 앱으로 이동합니다. - 추가/수정된 필드/테이블을 코멘트 아웃합니다.
$ manage.py Schemamigration <app_name> --initial
$ manage.py migrate <app_name> --Fake
- 필드의 코멘트를 해제하고 수정된 필드를 씁니다.
$ manage.py Schemamigration --auto
$ manage.py migrate <app_name>
pycharm을 사용하는 경우 manage 대신 ctrl+shift+r을 사용할 수 있습니다.py' 및 'shift'를 입력합니다.
언급URL : https://stackoverflow.com/questions/3235995/django-how-to-rename-a-model-field-using-south
'IT' 카테고리의 다른 글
자바에서는 에폭(1970-01-01)부터 밀리초를 취득하려면 어떻게 해야 합니까? (0) | 2022.11.27 |
---|---|
해결 방법: "http://java.sun.com/jsp/jstl/core"의 태그 라이브러리 기술자를 찾을 수 없습니다. (0) | 2022.11.27 |
함수 호출 전 @ 문자 (0) | 2022.11.27 |
목록 통합 및 기능 기능이 "루프용"보다 빠릅니까? (0) | 2022.11.27 |
라라벨 블레이드 점검 비어 있는 포어치 (0) | 2022.11.27 |