我正试图通过命令行将一个项目添加到db.sqlite3中
In [10]: m = Meldung('Die erste Meldung', zeitstempel=datetime.today(), text='Nun kommt das klassische Hallo-Welt-Beispiel.')
In [11]: m.save()
但是得到了这个错误:
ValueError: Field 'id' expected a number but got 'Die erste Meldung'.
在migrations\0001_initial.py中,位于contentobject的字段id下方的Meldung被声明为auto_created=True,但它似乎没有按预期工作。
我该如何解决?
预期结果
字段"id"由db.sqlite3 自动生成环境
Python 3.8.2
Django 3.1.3型号.py
from django.db import models
class Meldung(models.Model):
titel = models.CharField(max_length=100)
zeitstempel = models.DateTimeField()
text = models.TextField('Meldungstext')
class Kommentar(models.Model):
meldung = models.ForeignKey(
Meldung,
on_delete=models.CASCADE,
)
autor = models.CharField(max_length=70)
text = models.TextField('Kommentartext')
- 迁移\00001_initial.py
# Generated by Django 3.1.3 on 2020-11-04 20:57
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Meldung',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('titel', models.CharField(max_length=100)),
('zeitstempel', models.DateTimeField()),
('text', models.TextField(verbose_name='Meldungstext')),
],
),
migrations.CreateModel(
name='Kommentar',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('autor', models.CharField(max_length=70)),
('text', models.TextField(verbose_name='Kommentartext')),
('meldung', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='news.meldung')),
],
),
]
如果按位置传递值(因此没有参数名称(,则第一个参数为id
,因此'Die erste Meldung'
不是分配给title
,而是分配给隐式id
字段。
您可以通过将其作为名为的参数传递来解决此问题:
m = Meldung(
title='Die erste Meldung',
zeitstempel=datetime.today(),
text='Nun kommt das klassische Hallo-Welt-Beispiel.'
)
也可以将None
传递给id
参数:
m = Meldung(
None,
'Die erste Meldung',
zeitstempel=datetime.today(),
text='Nun kommt das klassische Hallo-Welt-Beispiel.'
)
但是,正如您自己发现的那样,它使Meldung
对象中的每个值都不清楚代表什么。