Несколько различных посторонних объектов в качестве "ресурсов"
Допустим, у меня есть модель, Повестка дня:
class Agenda(models.Model):
...
resource_comments = models.Field...
class ResourceComment(models.Model):
comment = models.TextField()
resource = models.ForeignKey... | GenericRelation
Допустим, я хочу, чтобы resource_comment
был одной или несколькими другими моделями, например... Restaurant
, PetrolStation
, CarPark
с комментарием.
Так, в повестке дня встречи мы можем захотеть поговорить о конкретном ресторане и паре автозаправочных станций поблизости. Неважно, это usecase.
Как мне поступить? Должен ли я иметь отдельное поле для каждого...? Это не совсем правильно... как будто я не хочу
class Agenda(models.Model):
...
restaurants = models....
parking_lots = models..
petrol_stations = models..
...
Полагаю, я мог бы иметь модель, подобную...
class Resource(models.Model):
resource_id = Int
resource_model = String # (e.g. Restaurant)
comment = String # (a comment pertaining to resource from having the agenda meeting)
Кроме того, я чувствую себя не в своей тарелке, поскольку мне приходится вручную получать объекты... Например
get restaurants_in_agenda(self):
ids = self.filter(resource_model="Restaurant").value_list('ids')
return Restaurant.objects.filter(id__in=ids)
Или, это нормально?
Другим решением было бы сделать Agenda общей моделью, но я вроде как не хочу, чтобы это поле было во всех бизнес-моделях... потому что... что мне тогда делать с комментарием ресурса?
class Agenda(models.Model):
attendants = models.ManyToManyField("base.User", related_name="agendas", blank=True)
created_at = models.DateTimeField(auto_now_add=True)
date = models.DateTimeField(null=True)
text = models.TextField()
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey("content_type", "object_id")
class OnAllBusinesses(models.Model):
...
agendas = GenericRelation(Agenda)
О чем я еще думал, так это о "через", так что,
class Agenda(models.Model):
restaurants = models.ManyToManyField(
"restaurant",
through="AgendaResource",
through_fields=("agenda", "restaurant"))
...
class AgendaResource(models.Model):
restaurant = models.ForeignKey(...)
agenda = models.ForeignKey(...)
comment = models.TextField()
...
Но затем у меня снова есть по одному для каждого типа бизнеса...
Спасибо за любую помощь.