社区所有版块导航
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学习  »  Django

求助,关于model中字段类型的问题。

Hiro • 10 年前 • 5260 次点击  

我用例子说明下我的疑问

有a、b、c三个小孩子和 A、B两个家庭,三个小孩是流浪儿,谁都可以救助他们。

这两个家庭都很有爱心,都把这三个小孩当做自己的孩子,但是小孩子们并不知道。

这时候问题来了,小孩与两个家庭之间的关系为

A-a
A-b
A-c
B-a
B-b
B-c

请问在数据库中想表示这种关系需要如何设置字段类型呢?

class Home(models.Model):
    children = ???

用外键的话,只能设置一个,用ManyToManyField就变成了如下的关系

A-a
a-A
A-b
b-A
A-c
c-A
B-a
a-B
B-b
b-B
B-c
c-B

请问这种我有三个小苹果的关系该怎么定义字段啊,因为苹果不知道它是属于我的啊。。。XD、

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/728
 
5260 次点击  
文章 [ 7 ]  |  最新文章 10 年前
Hiro
Reply   •   1 楼
Hiro    10 年前

@Django中国社区 我这小菜鸟连自己的问题都脑袋疼。。。>_<

Py站长
Reply   •   2 楼
Py站长    10 年前

@Hiro 好吧。。你这个方案不就是我第一个给的方案吗。。

社区要慢慢来。。你多来回答问题别人的问题,就会提高了:)

Hiro
Reply   •   3 楼
Hiro    10 年前

@Django中国社区 google 了一阵子,发现好多人想实现类似的功能,最后还是使用自定义模型了,结合 ForeignKey 和 related_name 实现 的需求。

谢谢老大的回复!!!

关于 OneToMany :http://blog.amir.rachum.com/blog/2013/06/15/a-case-for-a-onetomany-relationship-in-django/

感觉社区人好少,是因为 Django 高大上,大家都是很牛叉的原因么。。。大神们都在编码。。。

Hiro
Reply   •   4 楼
Hiro    10 年前

@Django中国社区 哎呀,,,我这破嘴。。。 还是我描述的不够准确,再加一个限定条件,孩子的数量是不确定的。

其实我就是想实现这样的一个逻辑 有很多个同级节点,每个节点可以指定其他节点为它的child,用manytomany就成了双向的关系,用foreignkey就只能指定一个,所以来此求助。。。本想举个栗子。。。结果越举越乱了。。。小的嘴笨。。。大人见谅。。。XD

Py站长
Reply   •   5 楼
Py站长    10 年前

如果所有家庭都拥有所有孩子的话

就不需要用数据库依赖表示了

class Home(models.Model):
        name

class Child(models.Model):
        name

childs=Child.objects.all()

所有home都拥有这个集合,不就好了。

Hiro
Reply   •   6 楼
Hiro    10 年前

@Django中国社区 谢谢前辈的回复。 很抱歉我的问题中的最后一句话没有描述清楚,我想实现的模型中有很多个家庭,但是都把孩子们作为自己的孩子,孩子不需要找到自己的所属家庭,如果用了ForeignKey的话,家庭是不是就只能有一个了。

Py站长
Reply   •   7 楼
Py站长    10 年前
 class Home(models.Model):
        name

class Child(models.Model):
    # 所属主题
    home = models.ForeignKey(Home, verbose_name = _('Home'), related_name = 'children')

child.home 可以访问它所属的家庭

home.children 可以得到孩子的集合