我有自定義遷移檔案,它在表用戶中創建條目。初始作業專案具有以下遷移:
1. 001_initial.py # creates model with some fields
2. 002_custom_user_data.py # adds data in "user" due some middle requirement after some time.
現在我想在這個表中再添加一列作為“ config_data ”。為此,我遵循了以下步驟:
1. python manage.py makemigrations <app-name> # creates one more migration file` 003_add_config_data_field.py
2. python manage.py migrate # raise an error
migrate 命令引發以下錯誤。
Applying my_user.001_initial.py... OK
Applying my_user.002_custom_user_data.py ...Traceback (most recent call last):
File "/home/myhome/.local/share/virtualenvs/myproject/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedColumn: column my_user.config_data does not exist
LINE 1: ..., "my_user"."address",
這是因為遷移 002 在表中遷移添加欄位遷移 (003) 之前嘗試訪問 my_user 表,這會引發 UndefinedColumn config_data 錯誤。
任何想法如何解決這個問題,因為這些遷移應該適用于新資料庫以及生產 dB,其中直到 002 更早遷移。
下面是 002_custom_user_data.py 的遷移
# Generated by Django 3.2.2
from django.db import migrations
from myapp.models import MyUser
def create_user(apps, schema_editor):
user = MyUser.objects.get_or_create(id=123)
user.address = 'demo'
user.save()
def delete_user(apps, schema_editor):
MyUser.objects.filter(id=123).delete()
class Migration(migrations.Migration):
dependencies = [
('my_user', '001_initial'),
]
operations = [
migrations.RunPython(create_user, delete_user, elidable=True)
]
謝謝。
uj5u.com熱心網友回復:
您應該匯入歷史模型,而不是您當前的模型。在運行遷移之前,Django 會跟蹤模型的外觀,您可以使用apps.get_model(…)[Django-doc] 方法訪問此類模型:
from django.db import migrations
# No import from myapp.models!
def create_user(apps, schema_editor):
MyUser = apps.get_model('my_user', 'MyUser')
user = MyUser.objects.get_or_create(id=123)
user.address = 'demo'
user.save()
def delete_user(apps, schema_editor):
MyUser = apps.get_model('my_user', 'MyUser')
MyUser.objects.filter(id=123).delete()
class Migration(migrations.Migration):
dependencies = [
('my_user', '001_initial'),
]
MyUser我們在此使用的模型本身不會具有您在 中定義的所有欄位,models.py欄位本身也不會具有相同的型別。因此,您可以在這里像當時那樣使用模型,從而定義資料遷移。例如,如果您創建了一個額外的欄位,這些記錄將在稍后更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334405.html
上一篇:模型Django不可迭代
