У меня есть onetomany Target --> Log
и Manytomany Target --> Tag
. Мне также нужна некоторая агрегированная информация из журналов для каждого экземпляра Target. Поэтому я создал представление базы данных myapp_targetstatistic
и определил модель для него ie TargetStatistics
с managed=False
. Поскольку TargetStatistics
- это просто Target
с дополнительными агрегированными полями из его журналов, я думаю, я мог бы сохранить в нем поле tags
, полагаясь на одну и ту же промежуточную таблицу (ie, myapp_target_tags
). Как этого добиться?
Простая реализация, так как следующее не будет работать. Это приводит к ошибке "The field's intermediary table clashes with ...
"
class Target(models.Model):
code=models.CharField(max_length=11, null=False)
tags=models.ManyToManyField(Tag, blank=True)
class Log(models.Model):
target=models.ForeignKey(Target, on_delete=models.CASCADE)
amount=models.DecimalField()
class Tag(models.Model):
name=models.CharField(max_length=32)
class TargetStatistics(models.Model):
code=models.CharField(max_length=11, null=False)
tags=models.ManyToManyField(Tag, blank=True, db_table='myapp_target_tags')
total_log_number=models.IntegerField()
total_log_amount=models.DecimalField()
class Meta:
managed=False
db_table='myapp_targetstatistic'