社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

ForeignKey的两个问题

gcd0318 • 9 年前 • 3940 次点击  

1,为一个组织设计人员管理系统,其中每个人(User)都有经理(Manager),同时经理也是组织内的用户,那么 User 类可以设计为:

class User(models.Model):
    ....
    manager = models.ForeignKey('self', blank=True)
    ....

考虑到大老板是没有经理的,所以给 manager 字段加上了 blank=True 的属性

但是实际运行的时候得到了

Cannot assign None: "User.manager" does not allow null values.

的错误,我估计可能是因为外键必须非空

为了回避这个问题,我打算定义大老板的经理就是自己。请问这一步应该怎么实现

2,其实这是一个和前面类似的问题,如果外键字段不能是空,那么我可以用其他方式回避这个问题,但有的时候这是无法回避的,比如这样的需求:

设计一个博客,每个帖子(Post)可以被回复(Comment),每个回复还可以再被回复,那么 Post 和 Comment 的定义可以是这样:

class Post(models.Model):
    ....
class Comment(models.Model):
    ....
    main_post = models.ForeignKey(Post)
    upper_comment = models.ForeighKeys('self')
    ....

但是有的回复是直接针对帖子的,所以 upper_comment 可能是空,但是又不能加 blank=True 的属性,应该怎么解决

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1016
 
3940 次点击  
文章 [ 4 ]  |  最新文章 9 年前
gcd0318
Reply   •   1 楼
gcd0318    9 年前

@saibei88 您这么说我就明白了,原来咱俩说的不是一件事啊

saibei88
Reply   •   2 楼
saibei88    9 年前

@gcd0318 试试看吧,前端展示的时候把空字符串处理下,发帖的时候禁止发全为空字符串的内容

gcd0318
Reply   •   3 楼
gcd0318    9 年前

@saibei88 就是default=""?

saibei88
Reply   •   4 楼
saibei88    9 年前

赋值的时候用"" 代替NULL,NULL和"" 不一样