Django Python 一对一关系示例

如果您需要查看 django 一对一关系示例的示例。
这是 django 一对一示例的简单示例。

我想向您展示具有一对一关系的 django 模型。我一步一步简单地解释了 django 一对一关系示例数据库。

一对一关系是一种关系类型,其中两个表的任一侧只能有一条记录。

这里我一步一步简单地解释了django一对一关系示例数据库:
第 1 步:创建项目

在这一步中,我们将使用 django-admin 创建一个新的 django 项目。返回命令行界面并运行以下命令:

django-admin startproject example

第 2 步:创建应用程序

python3 manage.py startapp place

接下来需要在settings.py文件中添加如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'place',
]

第 3 步:数据库设置

下一步,我们将修改 settings.py 文件并更新数据库设置以配置 mydb 数据库:
settings.py

DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'example',  
        'USER':'root',  
        'PASSWORD':'root',  
        'HOST':'localhost',  
        'PORT':'3306'  
    }  
}  

第 4 步:创建模型

在这一步中,我们将需要用于存储联系人的数据库模型。打开 place/models.py 文件并添加以下代码:
place/models.py

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

创建这些模型后,您需要使用以下命令创建迁移:第 5 步:创建迁移

python manage.py makemigrations

成功运行上述命令后,转到 place/migrations/0001_initial.py
place/ migrations /0001_initial.py

# Generated by Django 4.0.5 on 2022-06-28 12:18

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Place',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=50)),
                ('address', models.CharField(max_length=80)),
            ],
        ),
        migrations.CreateModel(
            name='Restaurant',
            fields=[
                ('place', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='blog.place')),
                ('serves_hot_dogs', models.BooleanField(default=False)),
                ('serves_pizza', models.BooleanField(default=False)),
            ],
        ),
    ]

接下来,您需要使用以下命令迁移数据库:

python manage.py migrate

第 6 步:向模型添加值

所以,在这一步中,让我们现在开始我们的 shell。现在我在两个表中都插入了一些值。在向 Restaurant 表插入数据时,请确保 Place 字段应该是 Place 表的一个实例。否则,它将通过错误。

python manage.py shell
In [1]: from blog.models import Place

In [2]: p1 = Place(name='Demon Dogs', address='944 W. Fullerton')
In [3]: p1.save()

In [4]: p2 = Place(name='Ace Hardware', address='1013 N. Ashland')
In [5]: p2.save()

In [6]: from blog.models import Restaurant

In [7]: r1 = Restaurant(place=p1, serves_hot_dogs=True, serves_pizza=False)
In [8]: r1.save()

In [9]: r2 = Restaurant(place=p2, serves_hot_dogs=False, serves_pizza=True)
In [10]: r2.save()

In [11]: p = Place.objects.all()
In [12]: print(p)

<QuerySet [<Place: Demon Dogs the place>, <Place: Ace Hardware the place>]>

In [13]: r = Restaurant.objects.all()
In [14]: print(r)

<QuerySet [<Restaurant: Demon Dogs the restaurant>, <Restaurant: Ace Hardware the restaurant>]>

In [15]: r.values()

Out[16]: <QuerySet [{'place_id': 1, 'serves_hot_dogs': True, 'serves_pizza': False}, {'place_id': 2, 'serves_hot_dogs': False, 'serves_pizza': True}]>

现在我正在尝试添加另一个餐厅数据,我正在尝试使用已经与另一个餐厅相关的 Place 实例 p1。

这将通过完整性错误。

In [17]: r3 = Restaurant(place=p1, serves_hot_dogs=True, serves_pizza=False)

In [18]: r3.save()

IntegrityError: UNIQUE constraint failed: place_restaurant.place_id

我希望它会帮助你……

django-python-one-to-one-relationship-example

发表评论

邮箱地址不会被公开。 必填项已用*标注