Как я могу создавать поля в модели в зависимости от другой модели?
Я изучаю Django и работаю в тестовом проекте.
Итак, в моем models.py у меня есть следующее (я знаю, что это неправильно, но я не знаю, как это сделать):
from django.db import models
class Diagram(models.Model):
name = models.CharField(max_length=100)
img = models.ImageField(upload_to='img/diagrams/', help_text="Size required: height = 1050px, width = 1506px.", max_length=None)
def __str__(self):
return self.name
class DiagramReferences(Diagram):
quantity_of_references = models.IntegerField()
for i in range(quantity_of_references):
title = models.CharField(max_length=50)
coords = models.CharField(max_length=50)
Итак, я хочу установить связь между обеими моделями, первая: Diagram содержит имя диаграммы и соответствующее изображение. В другой я хочу выбрать первую, которая уже создана, и присвоить ей, сколько ссылок она имеет, и создать поле для каждой ссылки.
Сначала вы собираетесь создать Diagram
. вы должны создать функцию для вашего каталога загрузки:
def user_directory_path_img(instance, filename):
# file will be uploaded to MEDIA_ROOT / user_<id>/<filename> if you've declared MEDIA path
return 'img/diagrams/{0}/{1}-{2}'.format(instance.name, datetime.now(tz=pytz.UTC).date(), filename)
class Diagram(models.Model):
name = models.CharField(max_length=100)
img = models.ImageField((upload_to=user_directory_path_img, null=True, blank=True)
def __str__(self):
return self.name
Затем вы собираетесь создать поле ForeignKey
. Как сказал vinkomlacic, вы не можете создавать динамические отношения, и рекомендуется не связываться с этим. Если вы хотите иметь различные поля, либо создайте TextField
с несколькими записями или массивами, либо просто создайте максимальное количество полей, которые вы считаете необходимыми, и установите их в blank=True, null=True
.
class DiagramReferences(models.Model):
diagram = models.ForeignKey(Diagram, on_delete=models.CASCADE, blank=True, null=True, default=None)
title = models.CharField(max_length=50, blank=True, null=True)
coords = models.CharField(max_length=50, blank=True, null=True)
extra = models.CharField(max_length=50, blank=True, null=True)