django ForeignKey null = true

时间:2013-02-08 19:20:53

标签: django model

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,所以这是无效的。

1 个答案:

答案 0 :(得分:3)

它不会导致架构发生任何变化(只是澄清它只创建表,不会修改),但是在syncdb上,将创建SQL语句,而不是 NOT NULL

您可以通过python manage.py sqlall my_app检查表定义的SQL输出,并亲自查看!