首页 > 解决方案 > 我应该如何在 django 中使用实例列表

问题描述

我正在尝试在 django 中使用某种对象列表。

所以我有不同的数据库条目:

class A(models.Model):
   name = models.CharField(max_length=250)

我想将这些数据库条目与其他数据库条目链接起来

class B(models.Model):
   name = models.CharField(max_length=250)
   list<A> = ???

我通常会在 B 类中存储 A 类实例的列表,但是在 django 中?A 类的每个实例在数据库中都有一个 ID。因此,您必须为 B 类的每个实例创建一个表,这些 A 类的 ID 存储在其行中。但是我该怎么做呢?

有人可以给我看一个简单的例子吗?

谢谢

编辑添加:好的,抱歉问题被问错了。我的意思如下:我bla = models.ManyToManyField ('A')在 B 中有一个 manytomany 字段。我现在如何在视图中添加数据:

 a = get_object_or_404 (A, id = request.POST.get ('a_id'))
 b = get_object_or_404 (B, id = request.POST.get ('b_id'))
 b.bla.add (a)
 b.save ()

不起作用(打印(a)和打印(b)已更正)

标签: django

解决方案


答案取决于您计划的关系将是什么。可以B关联多A条记录吗?如果是,那么您可能想要使用多对多字段:

class B(models.Model):
   name = models.CharField(max_length=250)
   publications = models.ManyToManyField(A)

如果每个B只能与单个相关,A那么您的选择可能是外键

class B(models.Model):
   name = models.CharField(max_length=250)
   publications = models.ForeignKey(A, on_delete=models.CASCADE)

在这两种情况下,您都可以使用查询来获取相关对象的列表。

但是您实际上不能以这种方式简单地定义一个数组字段并B在其中放置实例(问这个问题 - 它们将如何存储在 DB 中?)。如果您使用的是 PostgreSQL,您实际上可能会使用一个数组字段并将Aid 存储在那里。


推荐阅读