假设我们有两个模型帐户和配置文件:
class Profile < ApplicationRecord
belongs_to :account
scope :age_upper, ->(age) { where("age > ?", age) }
end
class Account < ApplicationRecord
has_one :profile
end
然后我们可以在Rails中进行帐户模型的查询,如下所示:
^{pr2}$但对于Django:
class ProfileQuerySet(models.QuertSet):
def age_upper(age):
return self.filter(age__gt=age)
class Profile(models.Model):
account = models.ForiegnKey('Account', on_delete=models.CASCADE)
objects = models.Manager.from_queryset(ProfileQuerySet)()
class Account(models.Model):
pass
我的问题是,我们是否可以使用Profile的过滤器age_upper
来查询帐户,而不是像下面这样为Account重写另一个过滤器
class AccountQuerySet(models.QuertSet):
def age_upper(age):
return self.filter(profile__age__gt=age)
class Account(models.Model):
objects = models.Manager.from_queryset(AccountQuerySet)()
在Rails中,不能使用一个模型的范围来查询另一个模型(至少在ActiveRecord中)。即使你能找到办法做到这一点,那也可能不是最好的办法。在
如果不想再次编写作用域或其他共享逻辑,可以使用类似的关注点:
然后在需要这种行为的所有模型中包含此问题:
^{pr2}$相关问题 更多 >
编程相关推荐