【问题标题】:Django: two tables or backref parameterDjango:两个表或 backref 参数
【发布时间】: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_providerforward FK,由字段名本身定义。要从 ServiceProvider 倒退到 Services,您可以使用 service_provider.<related_name>,由于您的设置方式,目前是 service_provider.ServiceProvider,这没有任何意义。 删除该设置并使用默认设置:service_provider.services_set.all()

标签: django database model


【解决方案1】:

您可以从相关名称访问。

service_provider_obj.ServiceProvider.all()

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2019-08-29
    • 2020-02-27
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多