当前位置: 首页 > 编程笔记 >

Django 创建具有关系的模型

尚鸿才
2023-03-14
本文向大家介绍Django 创建具有关系的模型,包括了Django 创建具有关系的模型的使用技巧和注意事项,需要的朋友参考一下

示例

多对一关系

fromdjango.dbimport models

class Author(models.Model):
   name = models.CharField(max_length=50)

#Book has a foreignkey (many to one) relationship with author
class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    publish_date = models.DateField()

最通用的选项。可以在您想要代表任何关系的任何地方使用

多对多关系

class Topping(models.Model):
    name = models.CharField(max_length=50)

# One pizza can have many toppings and same topping can be on many pizzas
class Pizza(models.Model):
    name = models.CharField(max_length=50)
    toppings = models.ManyToManyField(Topping)

在内部,这是通过另一个表表示的。并ManyToManyField应放在将在表单上进行编辑的模型上。例如:Appointment将具有ManyToManyField被叫Customer,Pizza具有Toppings等等。

使用直通类的多对多关系

class Service(models.Model):
     name = models.CharField(max_length=35)

class Client(models.Model):
    name = models.CharField(max_length=35)
    age = models.IntegerField()
    services = models.ManyToManyField(Service, through='Subscription')

class Subscription(models.Model):
     client = models.ForeignKey(Client)
     service = models.ForeignKey(Service)
     subscription_type = models.CharField(max_length=1, choices=SUBSCRIPTION_TYPES)
     created_at = models.DateTimeField(default=timezone.now)

这样,我们实际上可以保留有关两个实体之间关系的更多元数据。可以看出,客户端可以通过几种订阅类型订阅几种服务。在这种情况下的唯一区别是,要向M2M关系中添加新实例,不能使用捷径方法,而应创建直通类的新对象,pizza.toppings.add(topping)Subscription.objects.create(client=client, service=service, subscription_type='p')

在其他语言through tables中,也称为JoinColumn,Intersection table或mapping table

一对一关系

class Employee(models.Model):
   name = models.CharField(max_length=50)
   age = models.IntegerField()
   spouse = models.OneToOneField(Spouse)class Spouse(models.Model):
   name = models.CharField(max_length=50)

当两个模型之间只有合成关系时,请使用这些字段。

 类似资料:
  • 我使用下面的代码创建了20篇帖子,每个帖子都有3条评论。 相反,我想创建20个帖子,每个帖子都有随机数量的评论(例如,帖子1有2个评论,帖子2有4个评论,等等)。) 这不起作用,每个帖子都有相同(随机)数量的评论。 我怎样才能做到这一点?

  • 我正试图阻止我的关系重新开始。我尝试了多种方法来解决这个问题,但似乎每次都有一个错误。例如,当我尝试以下代码时: 我得到以下错误: 我已经检查了数据库中的所有表和索引,但在任何地方都找不到此约束。我该如何移除它。我基本上希望我的模式是这样的: 今年将有一份所有学生、老师的名单。当学生注册时,他们将被添加到该学年中 如果我不添加连接列,我只是得到另一个表说 Year.students 我如何将这些结

  • 问题内容: 假设我有两个表:Store和Product。我希望我的商店有产品清单。我怎样才能做到这一点? 我开始这样的事情,但是我不知道该如何完成,你们能帮我吗? 问题答案: 多对一(产品只能有一家商店) 多对多(产品可以在许多商店中使用)

  • 我试图将实体“blog”与关系一对一地添加到新的jhipster的项目中,但没有结果,jhipster生成器没有将实体“blog”添加到我的项目中 没有错误消息,什么都没有。我尝试通过JDL添加相同的实体-相同的结果。 null

  • 我尝试用Spring Boot Jpa自动创建表,但它不起作用,它不执行任何sql查询。我怀疑这是由于一个人或多个人的关系。我查了一下网站,但没能找到一个有类似问题的问题。Spring不执行任何查询和创建任何表。 用户可以创建很多帖子,每个帖子都有很多评论等等。 post.java 注释.java topic.java 我错在哪里?谢谢你!

  • “email”节点以前是从另一个“people.csv”文件创建的,并且“email”节点存在唯一性约束。在上面的行中,我希望通过关系将“created_by”、“delivered_to”和“delivered_by”节点与之前创建的“email”节点合并。当我运行代码时,它给出了错误,并且没有从CSV中创建any节点。如何组织密码查询以防止此错误?谢了。