1

我正在尝试通过命令行将项目添加到 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'.

在 contentobject Meldung 的字段 id 下面的 migrations\0001_initial.py 中被声明为 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')
  • 迁移\0001_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')),
            ],
        ),
    ]
4

1 回答 1

1

如果您按位置传递值(因此没有参数的名称),则第一个参数是id,因此您'Die erste Meldung'不是分配给隐式字段title而是分配给隐式id字段。

您可以通过将其作为命名参数传递来解决此问题:

m = Meldung(
    title='Die erste Meldung',
    zeitstempel=datetime.today(),
    text='Nun kommt das klassische Hallo-Welt-Beispiel.'
)

您还可以传递Noneid参数:

m = Meldung(
    None,
    'Die erste Meldung',
    zeitstempel=datetime.today(),
    text='Nun kommt das klassische Hallo-Welt-Beispiel.'
)

Meldung但正如您自己发现的那样,它使您不清楚对象中每个值代表什么。

于 2020-11-04T21:45:54.937 回答