< pre class="lang-py Prettyprint-override">
Код: Выделить всё
from django.db import models
class CustomCondition(models.Model):
name = models.CharField("custom condition name")
class Meta:
db_table = "custom_conditions"
def __str__(self) -> str:
return self.name
class BlockCondition(models.Model):
block = models.ForeignKey(
"Block",
related_name="block_condition_as_block",
on_delete=models.CASCADE,
)
custom_condition = models.ForeignKey(
CustomCondition,
related_name="block_condition_as_custom_condition",
on_delete=models.CASCADE,
)
choice = models.CharField(
"choice",
choices=[
("NO_CONDITION", "No condition"),
("ACTIVATED", "Activated"),
("NOT_ACTIVATED", "Not activated"),
],
default="NO_CONDITION",
)
class Meta:
db_table = "block_conditions"
def __str__(self) -> str:
return self.custom_condition.name
class Block(models.Model):
name = models.CharField("name", null=False)
block_conditions = models.ManyToManyField(
CustomCondition,
through="BlockCondition",
blank=True,
default=None,
related_name="blocks_as_block_condition",
)
class Meta:
db_table = "blocks"
Код: Выделить всё
for c in CustomCondition.objects.all():
if c.name:
filtered_blocks = Block.objects.filter(
block_conditions__custom_condition__name=c.name
)
filtered_blocks = filtered_blocks.filter(
block_conditions__choice__in=["ACTIVATED", "NO_CONDITION"]
)
print(filtered_blocks)
Код: Выделить всё
django.core.exceptions.FieldError: Unsupported lookup 'custom_condition' for ForeignKey or join on the field not permitted.
Подробнее здесь: https://stackoverflow.com/questions/783 ... tom-fields