django OneToOneField和ForeignKey有什么区别? [英] What's the difference between django OneToOneField and ForeignKey?

查看:112
本文介绍了django OneToOneField和ForeignKey有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

django OneToOneField和ForeignKey有什么区别?

What's the difference between django OneToOneField and ForeignKey?

推荐答案

请小心,意识到 OneToOneField(SomeModel) ForeignKey(SomeModel,unique = True)。如 Django的最终指南

Be careful to realize that there are some differences between OneToOneField(SomeModel) and ForeignKey(SomeModel, unique=True). As stated in The Definitive Guide to Django:


OneToOneField

一对一的关系在概念上,这类似于 ForeignKey unique = True ,但关系的反向一方将直接返回单个对象。

A one-to-one relationship. Conceptually, this is similar to a ForeignKey with unique=True, but the "reverse" side of the relation will directly return a single object.

OneToOneField 反向关系相反,一个 ForeignKey reverse关系返回一个 QuerySet

In contrast to the OneToOneField "reverse" relation, a ForeignKey "reverse" relation returns a QuerySet.

例如,如果我们有以下两个模型(下面是完整的模型代码):

For example, if we have the following two models (full model code below):


  1. 汽车模型使用 OneToOneField(Engine)

  2. Car2 模型使用 ForeignKey(Engine2,unique = True)

  1. Car model uses OneToOneField(Engine)
  2. Car2 model uses ForeignKey(Engine2, unique=True)

python manage.py shell 执行以下操作:

>>> from testapp.models import Car, Engine
>>> c = Car.objects.get(name='Audi')
>>> e = Engine.objects.get(name='Diesel')
>>> e.car
<Car: Audi>



ForeignKey with unique = True 示例



ForeignKey with unique=True Example

>>> from testapp.models import Car2, Engine2
>>> c2 = Car2.objects.get(name='Mazda')
>>> e2 = Engine2.objects.get(name='Wankel')
>>> e2.car2_set.all()
[<Car2: Mazda>]





Model Code

from django.db import models

class Engine(models.Model):
    name = models.CharField(max_length=25)

    def __unicode__(self):
        return self.name

class Car(models.Model):
    name = models.CharField(max_length=25)
    engine = models.OneToOneField(Engine)

    def __unicode__(self):
        return self.name

class Engine2(models.Model):
    name = models.CharField(max_length=25)

    def __unicode__(self):
        return self.name

class Car2(models.Model):
    name = models.CharField(max_length=25)
    engine = models.ForeignKey(Engine2, unique=True)

    def __unicode__(self):
        return self.name

这篇关于django OneToOneField和ForeignKey有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆