장고 - 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>
모델을 변경하고 실행하기만 하면 됩니다.makemigrations1.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 |