【问题标题】:django model field like viewdjango model field like view
【发布时间】:2012-12-16 12:14:02
【问题描述】:

我想要一个模型字段,该字段将返回另一个模型的最新相关信息。

一个例子-

class Thing(models.Model):
  name = models.CharField(max_length=200)
  state = models.ForeignKey(State, query=latest) #pure fantasy
class State(models.Model):
  change = models.DateTimeField(auto_now_add=True)
  thing = models.ForeignKey(Thing)

假设模型类 State 与 Thing 具有多对一的关系。

given-some_thing = Thing.object.all()[0]

我希望 some_thing.state 是 State 的实例,它具有我手头上的实例 Thing 的最新 State.change 值。

我想在 Django 模型级别指定一个实例变量来执行我上面描述的操作。我可以想到两种方法来做到这一点,但都没有达到这个水平:

  1. 在实际DB级别——创建视图并关闭django db 同步 (http://stackoverflow.com/questions/507795/can-i-use-a-database-view-as-a-model-in-django)
  2. 视图级别 -- 当我创建新的 State 行时,手动将该行设置为相关的 Thing.state 实例。

【问题讨论】:

  • 实现自定义模型方法不是第三种选择吗?

标签: django django-models


【解决方案1】:

您不能拥有数据库级别的动态外键。但是,您可以拥有一个属性或方法来为您捕获您的项目:

class Thing(models.Model):
    name = models.CharField(max_length=200)

    @property
    def state(self):
        return State.objects.latest('change')

class State(models.Model):
    change = models.DateTimeField(auto_now_add=True)
    thing = models.ForeignKey(Thing)

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 2012-11-01
    • 2014-01-10
    • 2019-05-09
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多