Loading

django | 为 model 定义逻辑外键

问题

想要在 orm 中定义外键,便于关联查询,但不想在数据库中生成实际的外键约束。


解决方式

DjangoForeignKey 和数据库的 FOREIGN KEY 并不一样。DjangoForeignKey 是一种逻辑上的两个表的关联关系,可以指定是否使用数据库的 FOREIGN KEY 约束。
如:

from django.db import models


class Province(models.Model):
    name = models.CharField(max_length=16)

    def __unicode__(self):
        return self.name


class City(models.Model):
    name = models.CharField(max_length=16)
    province = models.ForeignKey(Province, null=True, on_delete=models.DO_NOTHING, related_name='cities', db_constraint=False)

如果 ForeignKey 不添加 db_constraint=False 参数,会在数据库中使用外键约束。
另外,ForeignKeyon_delete 参数默认为 on_delete=models.CASCADE,表示使用数据库的级联删除,使用 on_delete=models.SET_NULL 可以使删除 Province 时将关联的 City 表对应的 province_id 值设为 NULL
使用这种方式不会破坏 Django 的反向关联查询。


参考

Django 的 ForeignKey 与数据库的 FOREIGN KEY约束_我的总结积累与分享-CSDN博客

posted @ 2024-06-25 22:36  kingron  阅读(10)  评论(0编辑  收藏  举报