[英]How to add default data to django model
我有一個 web 應用程序,其中包含以下 model
class Records(models.Model):
alias = models.CharField(max_length=17, unique=True)
status = models.BooleanField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.alias
def list_data(self):
return [self.alias, self.status, self.created_at, self.updated_at]
我希望在創建時將一些默認數據填充到此 model 中。 我瀏覽了文檔和這個StackOverflow 問題來做同樣的事情。
我首先運行這個命令來創建一個遷移文件(0001_initial.py)
python manage.py makemigrations --empty main_app
然后我按如下方式編輯了遷移文件
0001_initial.py
# Generated by Django 4.0.3 on 2022-04-23 05:57
from django.db import migrations
def add_initial_data(apps, schema_editor):
Records = apps.get_model('main_app', 'Records')
for record in Records.objects.all():
record.alias = f'ACCORD1'
record.status = True
record.save()
for i in range(2,6):
record.alias = f'ACCORD{i}'
record.status = False
record.save()
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.RunPython(add_initial_data)
]
當我使用以下命令運行遷移時
python manage.py migrate
我收到以下錯誤
LookupError: No installed app with label 'main_app'.
我嘗試將依賴項添加到遷移文件中,如下所示
dependencies = [
('main_app', '0001_initial')
]
但這給了我以下錯誤
django.db.migrations.exceptions.CircularDependencyError: main_app.0001_initial
我不確定我做錯了什么。
當被調用的文件與依賴項相關聯時遇到循環依賴項錯誤,該依賴項將被調用的文件作為其依賴項。
在文件main_app/001_initial.py
中,您通過添加以下行添加了依賴main_app/001_initial.py
:
dependencies = [
('main_app', '0001_initial')
]
在遷移時,會出現混淆是導入文件main_app/001_initial.py
還是依賴文件main_app/001_initial.py
其依賴文件main_app/001_initial.py
。 因此,創建了一個循環依賴模式。
從遷移文件中添加多行數據不是一個好的編碼范例的一部分。 你會想要使用不同的方法。
這些值只會在一次保存一個實例時幫助添加默認值。
class Records(models.Model):
alias = models.CharField(max_length=17, unique=True, default="ACCORD")
status = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.alias
現在有多種方法可以用數據填充表。
python manage.py shell
和python manage.py shellplus
。而不是在models.py
中使用list_data
function,使用 django 序列化程序將提供更多功能,並且是一種更好的編碼方式。
這個想法是讓models.py
盡可能干凈,只有屬性定義在那里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.