我的设置类似于以下(简化)示例:
class Pizza(models.Model):
name = models.CharField(max_length=100)
class Favorite(models.Model):
user = models.ForeignKey(User, related_name='favorites')
pizza = models.ForeignKey(Pizza, related_name='favorites')
class Meta:
unique_together = (('user', 'pizza'),)
我知道我可以通过favorites
属性过滤Pizza
模型实例上的user
属性,但我想抽象出来。
在我的应用程序中,用户应该只能访问其个人Favorite
模型实例。为了确保这一点,我发现自己必须一直过滤并做很多丑陋和低效的事情。
我想抽象一下这样,当用户登录时,我应该能够访问pizza.favorite
而不是pizza.favorites
,而Favorite
会自动映射到当前用户的Pizza
此特定ForeignKey
模型的模型。理想情况下,我也应该能够过滤这个属性(@property注释不可能)。基本上,它应该像OneToOne
现在是{{1}}字段一样。
有关如何实现此行为的任何想法?我应该注意,未经授权的用户不关心我。该应用程序不提供匿名访问,因此可以忽略边缘情况。
我正在使用Django 1.7,我也愿意使用开发版本,如果这样会有所帮助。