Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 德扬戈。理智和可理解的一对一关系_Python_Django_Orm_One To One - Fatal编程技术网

Python 德扬戈。理智和可理解的一对一关系

Python 德扬戈。理智和可理解的一对一关系,python,django,orm,one-to-one,Python,Django,Orm,One To One,我想知道如何使Django中的一对一关系对新开发人员来说更容易理解和清楚一点。 让我们来看一下Django文档的基本例子。 from django.db import models class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) def __str__(self): return "%s

我想知道如何使Django中的一对一关系对新开发人员来说更容易理解和清楚一点。 让我们来看一下Django文档的基本例子。
from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

    def __str__(self):
        return "%s the place" % self.name

class Restaurant(models.Model):
    place = models.OneToOneField(
        Place,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)

    def __str__(self):
        return "%s the restaurant" % self.place.name

class Waiter(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)

    def __str__(self):
        return "%s the waiter at %s" % (self.name, self.restaurant) 

What follows are examples of operations that can be performed using the Python API facilities.

Create a couple of Places:

>>> p1 = Place(name='Demon Dogs', address='944 W. Fullerton')
>>> p1.save()
>>> p2 = Place(name='Ace Hardware', address='1013 N. Ashland')
>>> p2.save()
Create a Restaurant. Pass the ID of the “parent” object as this object’s ID:

>>> r = Restaurant(place=p1, serves_hot_dogs=True, serves_pizza=False)
>>> r.save()

A Restaurant can access its place:

>>> r.place
<Place: Demon Dogs the place>
A Place can access its restaurant, if available:

>>> p1.restaurant
<Restaurant: Demon Dogs the restaurant>
来自django.db导入模型的

上课地点(模型。模型):
name=models.CharField(最大长度=50)
地址=models.CharField(最大长度=80)
定义(自我):
返回“%s”位置“%self.name”
高级餐厅(型号.型号):
地点=型号。一个地点(
地点,,
在_delete=models.CASCADE上,
主键=真,
)
供应热狗=models.BooleanField(默认值=False)
服务\u pizza=models.BooleanField(默认值=False)
定义(自我):
返回“%s”餐厅“%self.place.name”
班级服务员(models.Model):
餐厅=模型.ForeignKey(餐厅,on_delete=models.CASCADE)
name=models.CharField(最大长度=50)
定义(自我):
将“%s”返回给%s%的服务员(self.name,self.restaurant)
下面是可以使用Python API工具执行的操作示例。
创建两个位置:
>>>p1=地点(名称=‘恶魔狗’,地址=‘944 W.富勒顿’)
>>>p1.保存()
>>>p2=地点(名称='Ace Hardware',地址='1013 N.Ashland')
>>>p2.save()
创建一个餐厅。将“父”对象的ID作为此对象的ID传递:
>>>r=餐厅(地点=p1,供应热狗=True,供应比萨饼=False)
>>>r.save()
餐厅可以进入其位置:
>>>r.place酒店
一个地方可以进入其餐厅(如果有):
>>>p1.餐厅
我不明白如何让第一个模型知道并展示第二个模型的问题

因此,当我看到Place模型时,我不知道它以后是否应该包含餐厅属性。此属性将通过餐厅oneToOne字段关系进行分配

那么,是否存在任何官方的django方法来注释|让开发人员知道某些模型稍后将链接到另一个模型以了解新属性? 还是我应该只使用评论等


谢谢你的帮助

因此,关于@jason和@progmatico答案以及Django官方文档,我认为在第一个模型中对第二个模型进行一些注释是不可能的。 我知道关于DB关系原则等,它是好的。我不想说这个Django特性是好是坏

事实上,我们无法对第一个模型的未来第二个模型关系进行注释,这让我非常惊讶,因为,例如,在条令(PHP ORM)的情况下,存在这种可能性


进行OneToOneField引用时,这是外键关系的一种特殊情况。该关系在数据库中定义为链接回第一个表的第二个表的外键。鉴于此,您将如何更好地演示
Place
Restaurant
之间的关系?我认为,如果开发人员关心Restaurant模型,开发人员将了解Place和相应的property in Place对象。同样有争议的是,一个地点可以应用于许多不同的模型,而从地点一方与它们明确关联的想法是没有意义的(这是无需复制关系,您不知道未来的模型将需要一个地点)。等待更好的回答,但是@Jason comment已经明确说明了它如何反映数据库中的关系,以及在那里使用的ER模型。Jason和progmatico感谢大家的回答。我知道它在DB级别和Django的情况下是如何工作的。但我只是想知道是否有任何可能作出一些注释,使其明确。根据您的回答,我认为这是不可能的,我们应该检查数据库关系的DB或UML等。基于此,我们将知道我们的模型将具有关于Django ORM的属性或链接模型。如果我错了,请纠正我。没错。谢谢。现在我明白了,但老实说,这让我非常惊讶,因为,例如,在条令(php ORM)的情况下,存在这样的可能性