[英]Django models.py migrate
我知道已經有幾個關於遷移/ makemigrations命令的線程,但是即使我使用flush命令重置了整個數據庫,也沒有一個對我有用。
執行遷移后的錯誤是:
`Exception Type: OperationalError
Exception Value: no such column: geruestproject_billing.id`
奇怪的是0001.initial.py創建了類,但是通過migrations.AddField添加了屬性。 該代碼發布在下面
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Billing',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'verbose_name_plural': 'Rechnungen',
},
),
migrations.CreateModel(
name='Client',
fields=[
('Client', models.AutoField(primary_key=True, serialize=False)),
('Company_Name', models.CharField(blank=True, max_length=50, verbose_name='Firma')),
('Company_Email', models.EmailField(blank=True, max_length=254, verbose_name='Firma Email')),
('Company_Phone', models.CharField(blank=True, max_length=20, verbose_name='Telefon Firma')),
('Company_PostalCode', models.CharField(blank=True, max_length=6, verbose_name='Postleitzahl')),
('Company_City', models.CharField(blank=True, max_length=20, verbose_name='Stadt')),
('Company_Street', models.CharField(blank=True, max_length=20, verbose_name='Strasse')),
('Contact_LastName', models.CharField(blank=True, max_length=50, verbose_name='Nachname')),
('Contact_FirstName', models.CharField(blank=True, max_length=50, verbose_name='Vorname')),
('Contact_Phone', models.CharField(blank=True, max_length=20, verbose_name='Telefon Kontakt')),
],
options={
'verbose_name_plural': 'Kunden',
},
),
migrations.CreateModel(
name='Inventory',
fields=[
('Item', models.DecimalField(decimal_places=2, max_digits=5, primary_key=True, serialize=False)),
('Name', models.CharField(max_length=50)),
('Price', models.DecimalField(decimal_places=2, max_digits=7, null=True, verbose_name='Preis in €')),
('Amount', models.IntegerField(default=1000)),
],
options={
'verbose_name_plural': 'Lager',
},
),
migrations.CreateModel(
name='Project',
fields=[
('Project', models.AutoField(primary_key=True, serialize=False)),
('Project_Amount', models.IntegerField(default=10)),
('Item', models.ForeignKey(on_delete='SET_NULL', to='geruestproject.Inventory')),
],
options={
'verbose_name_plural': 'Projekte',
},
),
migrations.AddField(
model_name='billing',
name='invoice_client',
field=models.ForeignKey(default='', on_delete='CASCADE', to='geruestproject.Client'),
),
]
我的模型發布在下面(我刪除了不相關的部分)
class Billing(models.Model):
invoice_client = models.ForeignKey(Client, on_delete = 'CASCADE',
blank = False, default = '')
class Meta:
verbose_name_plural = 'Rechnungen'
import random, string
def code_generator(size = 7, chars = string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def save(self, *args, **kwargs):
self.invoice_number = code_generator()
super(Billing, self).save(*args, **kwargs)
謝謝!
這里給出了類似的解釋: https : //docs.djangoproject.com/en/2.0/topics/migrations/#dependencies
盡管此處給出的解釋是在兩個不同的應用程序之間進行的,但與您的情況非常相似 :
這意味着,當您運行遷移時,作者遷移將首先運行並創建該表的ForeignKey引用,然后使構成ForeignKey列的遷移隨后運行並創建約束 。 如果這種情況沒有發生,則遷移將嘗試在沒有引用該表的表的情況下創建ForeignKey列,並且數據庫將引發錯誤。
在您的情況下, 計費模型是在客戶端模型之前創建的,因此稍后會添加外鍵。
還要注意,由於庫存模型是在項目模型之前創建的,因此它可以在創建項目模型時添加外鍵。
當然,這里的問題在於表的創建順序。 照這樣說:
$ python3 manage.py makemigrations
$ python3 manage.py migrate
那應該解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.