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 . Это облегчит читабельность для других разработчиков.