4

データベースの内容を json 形式にダンプするコマンドを実行しています。

python manage.py dumpdata <appname>.<modelname> > file.json

ただし、と呼ばれる多対多フィールドをダンプしていませんcategory_id。実際には、それをダンプしていますが、フィールドは一貫して空です。どうして??

そのテーブルを直接呼び出してみました (これはカテゴリ マッピングです)。

python manage.py dumpdata <appname>.<modelname_category_id> > file.json

次のエラーが表示されます。

Error: Unable to serialize database: Category matching query does not exist.

Django 1.2.1 と SQLite バックエンドを使用しています。

ヒントはありますか?

更新: modelname.category_id テーブルのすべての行を削除しようとしましたが、行が 1 つしかない場合でも、このエラーが発生します。

テーブルは次のように定義されます id: 整数 PRIMARY KEY unipart_id: 整数 category_id: 整数

unipart_id フィールドと category_id フィールドの両方が有効であり、存在します。

4

3 に答える 3

2

以下のような2つのテーブルがあります。

from django.db import models


class AggregationCategories(models.Model):
    name = models.CharField(max_length=50)

    class Meta:
        db_table = "AggregationCategories"


class AggregationFunctions(models.Model):
    name = models.CharField(max_length=50)
    aggregation_category = models.ManyToManyField(
        AggregationCategories,
        related_name='aggregationfunctions_aggregationcategories'
    )

    class Meta:
        db_table = "AggregationFunctions"

多対多の関係を作成すると、 の構造を持つ追加のテーブルが得られます<model name>_<filed name>。したがって、私の例によれば、model nameisAggregationFunctionsfield nameisaggregation_categoryです。それに基づいて、追加のテーブルはAggregationFunctions_aggregation_category. はい、下の図で 3 つのテーブルすべてを見ることができます。

ここに画像の説明を入力

したがって、次のように 3 番目のテーブルにデータをダンプできますpython manage.py dumpdata <app name>.<third table name>。だから私のはとapp nameはです。それに基づいて、私のコマンドは、cataloguethird table nameAggregationFunctions_aggregation_category

python manage.py dumpdata catalogue.AggregationFunctions_aggregation_category

例として、 ManyToManyField.throughManyToManyField.through_fieldsを使用して多対多テーブルを作成した場合 (Django 公式ドキュメントから直接取得)、

from django.db import models


class Person(models.Model):
    name = models.CharField(max_length=50)


class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(
        Person,
        through='Membership',
        through_fields=('group', 'person'),
    )


class Membership(models.Model):
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    inviter = models.ForeignKey(
        Person,
        on_delete=models.CASCADE,
        related_name="membership_invites",
    )
    invite_reason = models.CharField(max_length=64)

これで、多対多の関係のクラス呼び出しMembershipができたので、以前と同じように使用できます。

python manage.py dumpdata catalogue.Membership
于 2020-12-04T08:31:02.857 に答える
0

おそらく、カテゴリにある外部キーがいくつかの行に入力されていないためです。この Web を確認してください: http://wiki.ddenis.com/index.php?title=Django._Error:_Unable_to_serialize_database:_ *_matching_query_does_not_exist.

于 2012-09-27T10:29:09.403 に答える