У меня есть следующие настройки модели:
class Model1(models.Model):
val1 = models.CharField(max_length=25, blank=True)
val2 = models.CharField(max_length=25, blank=True)
user = models.ForeignKey('users.User', on_delete=models.PROTECT, related_name='model1')
class Model2(models.Model):
val3 = models.BinaryField()
model1_link = models.ForeignKey(Case, on_delete=models.CASCADE, related_name='model2')
class Model3(models.Model):
id = models.BigAutoField(primary_key=True)
model2_link = models.ForeignKey(Model2, on_delete=models.CASCADE, related_name='model3')
class Model4(models.Model):
id = models.BigAutoField(primary_key=True)
model3_link = models.ForeignKey(Model3, on_delete=models.CASCADE, related_name='model4', null=True, default=None)
pred = models.CharField(max_length=50)
В моем шаблоне HTML у меня есть раздел, в котором я перебираю записи из Model1 (например, val1) и хотел бы иметь возможность для каждого значение, чтобы включить поле 'pred' из Model4. В настоящее время модели 1-4 имеют последовательную связь через свои FK. Да, я знаю, что мог бы просто включить FK в Model4, связав его с Model1, но с логической точки зрения я не предпочитаю эту опцию в данный момент.
В любом случае, такое выражение не выполняет работу на моем конце:
...
{% for entry in model1_entries %}
...
{% if user.is_superuser and entry.model2.model3.model4.count > 0 %}
something here
{% endif %}
...
{% endfor %}
Я полагаю, что проблема как-то связана с тем, что call model1.model2 возвращает набор всех model2, связанных с model1, но я не знаю, как выбрать один в этом выражении и пробежаться с ним по остальным моделям, прежде чем достигнуть # 4.
Есть идеи?