美文网首页
model relationships

model relationships

作者: xncode | 来源:发表于2017-09-13 16:19 被阅读0次

django提供了三种表示关系的东西

多对一 多对多 一对一

多对一

ForeignKey 接收的第一个参数就是对应关系的表的model

多对多

ManyToManyField 接收的第一个参数就是对应关系的表的model

中间人 用于再中间model中放更多的字段

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)

>>> ringo = Person.objects.create(name="Ringo Starr")
>>> paul = Person.objects.create(name="Paul McCartney")
>>> beatles = Group.objects.create(name="The Beatles")
>>> m1 = Membership(person=ringo, group=beatles,
...     date_joined=date(1962, 8, 16),
...     invite_reason="Needed a new drummer.")
>>> m1.save()
>>> beatles.members.all()
<QuerySet [<Person: Ringo Starr>]>
>>> ringo.group_set.all()
<QuerySet [<Group: The Beatles>]>
>>> m2 = Membership.objects.create(person=paul, group=beatles,
...     date_joined=date(1960, 8, 1),
...     invite_reason="Wanted to form a band.")
>>> beatles.members.all()
<QuerySet [<Person: Ringo Starr>, <Person: Paul McCartney>]>

但是不能使用ManyToMany的常规方法如add create set remove clear

一对一

OneToOneField 接收的第一个参数就是对应关系的表的model

相关文章

网友评论

      本文标题:model relationships

      本文链接:https://www.haomeiwen.com/subject/xrxlsxtx.html