Pravin Mishra
Pravin Mishra

Reputation: 86

Django orm query access value

I have two models want to get value of one model from another. Every this is explained in view.py comments.

Error:

'Service' object has no attribute 'business_profile'

models.py

class Service(models.Model):
    name = models.CharField(max_length=50)
    image = models.ImageField(upload_to='image', blank = True)
    #business_profile = models.ManyToManyField("BusinessProfile", blank=True, related_name="business_of_services")

    def __str__(self):
        return "Service - {}".format(self.name)


class BusinessProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)
    business_name = models.CharField(max_length=100, unique =True)
    register_date = models.DateTimeField(default=timezone.now)
    pan_number = models.IntegerField(unique=True)
    pan_name = models.CharField(max_length=100)
    address = models.TextField(max_length=200)
    pincode = models.IntegerField()
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=50)

    service  = models.ManyToManyField("Service", blank=True, related_name="services_of_business")
    image  = models.ManyToManyField("Service", related_name="image_of_business")

Views.py

service = Service.objects.all() #getting all the services
    for i in service :
        print(i.name) # working
        # Now as services is also connected to businessprofile I want to print business_id for this service.
        print(i.business_id) # something like this

Upvotes: 0

Views: 33

Answers (1)

Jeet
Jeet

Reputation: 372

Make use of related_name. You can do something like this

services = Service.objects.all()
for service in services:
    print(service.name)
    for profile in service.services_of_business.all():
        print(profile.business_name) #or whatever you want to print or access

Upvotes: 1

Related Questions