Django фильтрует данные в таблице на основе значения из другой таблицы?

views.py :

def dcuinterval(request):

var7 = dcu.objects.all()
MU_count = Meter_Mapping_Table.objects.filter(DCU_id=dcu.id).count()
d = {
    'MU_count': MU_count, 'var7': var7,
}
return render(request, 'dcu_interval.html', d)

Models.py:

class dcu(models.Model):
id = models.AutoField(unique=True, editable=False, primary_key=True)
Asset = models.CharField(max_length=128)
IMEI_Number = models.CharField(max_length=128)

def __str__(self):
    return self.Asset

class Meter_Mapping_Table(models.Model):

mid = models.AutoField(unique=True, editable=False, primary_key=True)
Meter_id = models.CharField(
    max_length=128, help_text='(ID of the Meter table)')
MU_id = models.CharField(max_length=150)
DCU_id = models.CharField(max_length=150, null=True, blank=False)

def __str__(self):
    return self.Meter_id

как отфильтровать данные на основе данных из другой таблицы?

мне нужно отфильтровать DCU_id на основе поля id таблицы DCU DCU_id =1; DCU.id=1; ОТВЕТ: MU_count=1 вот так мне нужно отфильтровать и показать, что count

Вы можете использовать:

Meter_Mapping_Table.objects.filter(DCU_id='1').count()

Хотя это и правильный ответ, вам нужно действительно продумать дизайн вашей базы данных и использовать отношения ForeignKey. Использование внешнего ключа в качестве CharField не рекомендуется.

Я бы предложил следующее:

Изменение:

DCU_id = models.CharField(max_length=150, null=True, blank=False)

To:

DCU = models.ForeignKey(dcu, null=True, blank=False)

Тогда вы можете сделать запрос следующим образом:

Meter_Mapping_Table.objects.filter(DCU=1).count()

Примечание: Также рассмотрите возможность следовать Конвенции об именовании моделей в Django . Это облегчит читабельность для других разработчиков.

Вернуться на верх