首页 > 解决方案 > Django orm 查询访问值

问题描述

我有两个模型想从另一个模型中获得一个模型的价值。view.py 注释中对此进行了解释。

错误:

'Service' 对象没有属性 'business_profile'

模型.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")

视图.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

标签: django

解决方案


使用related_name。你可以做这样的事情

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

推荐阅读