【发布时间】:2019-03-22 22:33:33
【问题描述】:
我目前有两个模型。
class ServiceProvider(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=256)
email = models.CharField(max_length=256)
class Services(models.Model):
plumbing = models.IntegerField(default=0)
cleaning = models.IntegerField(default=0)
handy_man = models.IntegerField(default=0)
electrician = models.IntegerField(default=0)
door_repair = models.IntegerField(default=0)
fan_install = models.IntegerField(default=0)
service_provider = models.ForeignKey(
ServiceProvider, related_name="ServiceProvider",
on_delete=models.CASCADE)
我可以从服务中获取服务提供者,但是我如何在拥有服务提供者的同时获取服务。类似 ServiceProvider.Services 的东西。 flask backref = true 中有一个参数。它在那里完成了任务,但这在 django 中是缺失的。
【问题讨论】:
-
那个相关的名字没有意义,但这正是它的用途。
-
抱歉,没听懂?
-
不确定如何使其更清晰。外键中的related_name 参数是您问题的确切 答案,但您已将其设置为没有意义的内容并隐藏了它的作用。
-
由于 related_name="ServiceProvider" 我能够做 Service.ServiceProvider 并且我得到了很好的整个对象。现在我想要相反的事情,就像我可以做 ServiceProvider.Service 但 django 给我一个错误“无属性”
-
啊。不,这不是related_name 所做的。
service.service_provider是 forward FK,由字段名本身定义。要从 ServiceProvider 倒退到 Services,您可以使用service_provider.<related_name>,由于您的设置方式,目前是service_provider.ServiceProvider,这没有任何意义。 删除该设置并使用默认设置:service_provider.services_set.all()。