Может ли несколько пользователей использовать одну и ту же таблицу-посредник в Django? - PullRequest
0 голосов
/ 26 января 2020

У меня есть 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'
...