【问题标题】:Django - dynamic model parameter valueDjango - 动态模型参数值
【发布时间】:2015-12-09 22:04:15
【问题描述】:

我有两个具有 ForeignKey 关系的简单模型,Category 和 Object 可以说(Object 具有 Category 的 FK 属性),在管理中我需要根据实际选择的 Category 分配另一个对象属性值的值。

例子:

我将在 Django 管理界面中创建具有 cat_name="A" 属性的类别和另一个具有 cat_name="B" 的类别。 现在在对象创建表单中,我可以选择“A”或“B”类别的形式,并根据该选择在 Object.description 属性中存储类似“所选类别为 B”的内容

我尝试了几种方法,但都以必须以某种方式将 Category 对象的实例传递给 Object 创建表单这一事实而告终。

谢谢

【问题讨论】:

  • 只是为了确保,您在谈论管理方面而不是在您的 views.py 中,对吧?
  • 您考虑过使用 post_save (docs.djangoproject.com/en/1.9/ref/signals/#post-save) 信号吗?
  • 是的,到目前为止我处于管理站点阶段 ;-) 将检查 Post 保存,谢谢

标签: python django django-models foreign-keys


【解决方案1】:

您在保存数据之前通过覆盖保存函数执行此操作:

class ObjectModel(models.Model):
    category = models.ForeignKey(# details goes here)
    .....  # other fields goes here

    def save(self, *args, **kwargs):
        if self.category.name == 'A':
            self.description = ...
        elif self.category.name == 'B':
            .... # different behavior etc
        super(ObjectModel, self).save(*args, **kwargs)

【讨论】:

    【解决方案2】:

    好的,最后我找到了可以接受的解决方案。我在保存 Category 对象并将其属性传递给对象时创建相关对象。像

    class Category(models.Model):
          name = models.CharField(max_length=10)
          ...
          def save(self, *args, **kwargs):
              super(Category, self).save(*args, **kwargs)
                    Object.objects.create(name=self.name)
    

    我注意到的唯一缺点是,创建这种自动方式的对象必须具有空属性(如果允许)或机器生成属性,但这对我来说只是一个小缺陷我可以通过常见的管理表格进行任何更新。

    【讨论】:

      猜你喜欢
      • 2013-07-06
      • 2013-08-04
      • 2020-01-02
      • 1970-01-01
      • 2016-03-17
      • 2018-06-10
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多