Как мне использовать списки экземпляров в django - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь использовать какой-то список объектов в django.

Поэтому у меня есть разные записи в базе данных:

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

Я хотел бы связать эти записи базы данных с другими записями базы данных

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

Я бы обычно сохранял список экземпляров класса A в классе B, но в django? Каждый экземпляр класса A имеет идентификатор в базе данных. Таким образом, вам нужно будет создать таблицу для каждого экземпляра класса B, в строках которой хранятся эти идентификаторы класса A. Но как мне это сделать?

Может кто-нибудь показать и объяснить мне простой пример?

thx

РЕДАКТИРОВАТЬ ДОБАВИТЬ: хорошо, извините, вопрос задан неправильно. Я имею в виду следующее: у меня есть много полей bla = models.ManyToManyField ('A') в B. Как теперь я могу добавить данные в представление:

 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 ()

не работает (print (a) и print (b) исправлено)

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Наличие списка A экземпляров для каждого B экземпляра требует поля ForeignKey в A, а не поля в B. Это связано с тем, что список A в B означает, что несколько экземпляров A принадлежат одному экземпляру B.

Рассмотрим следующий код:

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


class A(models.Model):
   name = models.CharField(max_length=250)
   b = models.ForeignKey(B, related_name='As')

Затем, чтобы получить доступ к списку A s для экземпляра B, используйте:

b = B.objects.first() # or any instance of b, this is just an example
list_of_As_in_b = b.As.all()

Read о отношениях «многие к одному» в целом и ForeignKeys в Django для полного понимания того, как это работает на уровне базы данных и в Django.

0 голосов
/ 03 февраля 2020

Ответ зависит от того, какими будут ваши запланированные отношения. Может ли 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 экземпляров (задайте этот вопрос - как они будут храниться в БД?). Если вы используете PostgreSQL, вы можете использовать поле массива и хранить там A идентификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...