Вопрос:
Я вижу много связанных вопросов с моими, и когда я их проверю, из того, что я вижу, мой код должен работать, но я получаю ошибку ниже?
модели:
class Circuits(models.Model): site_data = models.ForeignKey(SiteData,verbose_name=»Site») order_no = models.CharField(max_length=200,verbose_name=»Order No») expected_install_date = models.DateField() install_date = models.DateField(blank=True,null=True) circuit_type = models.CharField(max_length=100,choices=settings.CIRCUIT_CHOICES) circuit_preference = models.CharField(max_length=20,verbose_name=»Circuit Preference»,choices=settings.CIRCUIT_PREFERENCE,blank=True,null=True) circuit_speed = models.IntegerField(blank=True,null=True) circuit_bearer = models.IntegerField(blank=True,null=True) class CircuitMaintenance(models.Model): circuit = models.ForeignKey(Circuits,verbose_name=»Circuit», related_name=’maintenance’) ref = models.CharField(max_length=200,verbose_name=»Ref No») start_time = models.DateTimeField() end_time = models.DateTimeField() notes = models.TextField(blank=True,null=True)
Ошибка
circuits = Circuits.objects.filter(site_data__id=1) for i in Circuits.maintenance.all(): print i AttributeError: ‘ReverseManyToOneDescriptor’ object has no attribute ‘all’
EDIT:
с поправкой на нижний регистр c все еще получают ошибку:
>>> from sites.models import Circuits >>> circuits = Circuits.objects.filter(site_data__id=1) >>> for i in circuits.maintenance.all(): … print i … Traceback (most recent call last): File «<console>», line 1, in <module> AttributeError: ‘QuerySet’ object has no attribute ‘maintenance’ >>> Лучший ответ:
Вам нужно использовать переменную circuits
circuits = Circuits.objects.filter(site_data__id=1) for cm in circuits: maintenances = cm.maintenance.all() for maintenance in maintenances: print(maintenance )
Если вы не определили related_name, вы можете сделать:
circuits.circuitmaintenance_set.all() :