Django - 动态模型参数值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django - 动态模型参数值相关的知识,希望对你有一定的参考价值。

我有两个简单的模型与ForeignKey关系,类和对象说(对象有FK属性为类别)和管理我需要根据实际选择的类别分配另一个对象属性值的值。

例:

我将在Django Admin界面类别中创建属性cat_name =“A”和另一个类别cat_name =“B”。现在在对象创建表单中,我可以选择“A”或“B”类别的形式,并根据该选择我需要存储在Object.description属性中,如“Selected category is B”

我已经尝试了几种方法但最终都是因为Category对象的实例必须以某种方式传递给Object创建表单。

谢谢

答案

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

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)
另一答案

好的,最终我找到了可以接受的解决方案。我正在保存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)

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

以上是关于Django - 动态模型参数值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中动态过滤多个值的模型结果

Cg入门19:Fragment shader - 片段级模型动态变色

使用 Django,如何在模板中动态设置 ModelForm 字段值?

将属性动态添加到 django 模型

Django 动态过滤 ListView 返回错误:get() 为参数“self”获取了多个值

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?