3
from django.db import models

class Story(models.Model):
    id = models.IntegerField(primary_key=True)
    news_type = models.CharField(max_length=255,null=True)
    category_id = models.CharField(max_length=255,null=True)
    title = models.CharField(max_length=255,null=True)
    created = models.DateTimeField(null=True)
    author = models.CharField(max_length=255, null=True)
    author_title = models.CharField(max_length=255, null=True)
    image_caption = models.TextField(null=True)
    image_credit = models.CharField(max_length=255,null=True)
    image_full_url = models.CharField(max_length=255,null=True)
    body = models.TextField(null=True)
    summary = models.TextField(null=True)
    video_id = models.CharField(max_length=255,null=True)
    external_url = models.CharField(max_length=255,null=True)
    order = models.IntegerField(null=True)

class StoryFactBox(models.Model):
    story = models.ForeignKey('Story', null = True)
    body = models.TextField()

class StoryKeyword(models.Model):
    story = models.ForeignKey('Story', null = True)
    keyword = models.CharField(max_length=255)

どのようなスキーマの変更がmodels.ForeignKey('Story', null = True)発生しますか?

私はドキュメントから読んでいます:

remove()とclear()を使用したいのですが、これはドキュメントの一部です。

データベースの不整合を防ぐために、このメソッドはnull=TrueのForeignKeyオブジェクトにのみ存在します。関連フィールドをNone(NULL)に設定できない場合、オブジェクトを別のオブジェクトに追加せずにリレーションから削除することはできません。上記の例では、b.entry_set()からeを削除することは、e.blog = Noneを実行することと同じです。また、ブログのForeignKeyにはnull = Trueがないため、これは無効です。

4

1 に答える 1

3

スキーマは変更されませんが(テーブルを作成するだけで、変更はしないことを明確にするだけです)、syncdbを実行すると、 。なしで NOT NULLSQLステートメントが作成されます。

を介してテーブル定義のSQL出力を確認しpython manage.py sqlall my_app、自分の目で確かめることができます。

于 2013-02-08T19:31:46.810 に答える