Django 的 ORM 有多种关系:一对一,多对一,多对多。

各自定义的方式为 :
       一对一: OneToOneField
       多对一: ForeignKey
       多对多: ManyToManyField
上边的描述太过数据而缺乏人性化,我们来更人性化一些:
       多个属于一个,即 belong to :  ForeignKey,多个属于一个
       一个有一个,即 has one: OneToOneField
       一个有很多个,即 has many:  lots of A belong to B 与 B has many A,在建立 ForeignKey 时,另一个表会自动建立对应的关系
       一个既有很多个,又属于很多个,即 has many and belong to : ManyToManyField,同样只能在一个model类中说明,关联表会自动建立。

操作数据表总的来说就是:

一对一和一对多
1、查找数据使用 __ 连接
2、获取数据时使用 . 连接

前提条件-正向和反向的定义:

正向:基于存在ForeignKey或ManyToManyField 字段的表查找为正向

反向:基于不存在ForeignKey或ManyToManyField表查找为反向

 #反向查询
_set
注意:xx_set中的xx为小写的表名

例子如下:

#-*- coding:utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.

from django.db import models

class UserType(models.Model):
    caption = models.CharField(max_length=32)

class UserInfo(models.Model):
    user_type = models.ForeignKey(UserType)# user_type对象中封装id,caption
    username = models.CharField(max_length=32)
    age = models.IntegerField()






class MyUser(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

    def __unicode__(self):
        return self.username

class News(models.Model):
    title = models.CharField(max_length=32)
    content = models.CharField(max_length=32)
    def __unicode__(self):
        return self.title

class Favor(models.Model):
    user_obj = models.ForeignKey(MyUser)
    new_obj = models.ForeignKey(News)

    def __unicode__(self):
        return "%s -> %s" %(self.user_obj.username, self.new_obj.title)




# ########################### 多对多
class Host(models.Model):
    hostname = models.CharField(max_length=32)
    port = models.IntegerField()

class HostAdmin(models.Model):
    username = models.CharField(max_length=32)
    email = models.CharField(max_length=32)
    host = models.ManyToManyField(Host)




#=========================== 方式二,自定义关联表

class Host1(models.Model):
    hostname = models.CharField(max_length=32)
    port = models.IntegerField()

class HostAdmin1(models.Model):
    username = models.CharField(max_length=32)
    email = models.CharField(max_length=32)
    host = models.ManyToManyField(Host1, through='HostRelation')

class HostRelation(models.Model):
    c1 = models.ForeignKey(Host1)
    c2 = models.ForeignKey(HostAdmin1)
models.py

相关文章:

  • 2021-11-19
  • 2021-09-20
  • 2022-12-23
  • 2022-01-13
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2021-09-06
  • 2021-08-17
  • 2021-10-28
  • 2022-12-23
  • 2021-11-29
相关资源
相似解决方案