【问题标题】:Foreign Key "automatic column lookup" in DjangoDjango中的外键“自动列查找”
【发布时间】:2017-10-12 04:32:15
【问题描述】:

考虑以下模型:

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=255)
    publisher = models.ForeignKey('Publisher')

class Publisher(models.Model):
    id = models.AutoField(primary_key=True)
    publisher_name = models.CharField(max_length=255)

我想打电话给Book.objects.filter(id=123),但输出应该是:

{ 'id':123, 'title':'ABC', 'publisher':1 } 用于管理员用户,并且

{ 'id': 123, 'title':'ABC', 'publisher':'XYZ Books' } 适用于普通用户。

我的问题是,这可以用select_related() 完成还是只更改models.ForeignKey() 参数?

【问题讨论】:

  • 查询时使用select_related,根据实际调用api的用户修改api响应。
  • 您想要普通用户权限的发布者名称?

标签: python sql django


【解决方案1】:

如果普通用户只调用出版商,您可以使用Book.objects.filter(id=123).publisher_name 从图书对象中获取出版商名称。

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=255)
    publisher = models.ForeignKey('Publisher')

    @property
    def publisher_name(self):
        return self.publisher.publisher_name

class Publisher(models.Model):
    id = models.AutoField(primary_key=True)
    publisher_name = models.CharField(max_length=255)

【讨论】:

    猜你喜欢
    • 2010-11-11
    • 2013-02-24
    • 2013-10-18
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2012-11-17
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多