根据当前用户将ForeignKey转换为OneToOne字段

时间:2014-09-28 20:05:51

标签: django foreign-key-relationship one-to-one

我的设置类似于以下(简化)示例:

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,我也愿意使用开发版本,如果这样会有所帮助。

0 个答案:

没有答案