相关疑难解决方法(0)

请参阅另一个类变量定义中的类变量

class SomeClass:
    SOME_CONST = "hello"
    SOME_OTHER_CONST = SomeClass.SOME_CONST + " world"
Run Code Online (Sandbox Code Playgroud)

这不起作用.

NameError:未定义名称"SomeClass"

有没有办法在课堂上引用课程?

python

10
推荐指数
1
解决办法
1032
查看次数

将ManyToMany字段的Widget自定义为具有循环ForeignKey的Model

我有两个型号分类和产品.

  • 产品可以有多个类别
  • 一个类别可以有多个产品.
  • 类别具有循环外键,本身.
  • 并非所有类别都具有相同的深度级别

例:

  • A类
    • A_1类
    • 类别A_2
      • 类别A_2_1
  • B类
  • C类
    • C_1类

models.py

class Product:
    categories = models.ManyToManyField(Category)
    name = models.CharField(max_length=255)

class Category:
    categories = models.ForeignKey(self)
    name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

作为表单我使用ModelForm:

class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields = ['categories', 'name', 'short_description', 'description']
        widgets = {
            'categories': MyWidget,
        }
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

我想实现条件选择(窄选项)在产品表单创建上:

  1. 只有顶级父类别(级别0 A,B,C)可用
  2. 用户选择父类别.如果父母有孩子,他的孩子会出现一个新的选择框(类别1 A1,C1)
  3. 用户选择1级类别(A1,C1).如果父母有孩子,他的孩子会出现一个新的选择框(2级A2)

    • 重复该过程,直到没有子项可用(递归),用户选择树中的"最小"类别
    • 用户可以使用新按钮添加更多类别并再次启动1-3流程
    • 我想做选择,使用JavaScript添加新选择
    • 在表单提交我想只发送最后的子类别

选项我想:

  1. 更改ManyToMany相应的默认字段 - 看起来没有好的挂钩和/或继承
  2. 使用ManytoMany的非默认自定义字段instean(如Charfield) - 在清理,保存表单上更复杂
  3. 更改/继承小部件.我的问题是如何在提交时将数据发送到默认字段,并在编辑时显示/显示它

实用,假设我有7个选择框,每个框的值都是:

  1. Parent1-> Child11-> Child111
  2. Parent2-> Child21
  3. Parent3-> Child31-> Child311

如何告诉Django浏览器提交(以及其他数据)发送给ManyToMany的所有三个中的最后一个Child

我可以用Javascript收集它们,但我必须告诉Django获取这些数据,这就是你需要的. …

django django-forms django-widget

5
推荐指数
1
解决办法
496
查看次数

在 Python 装饰器中获取类

在这段代码中:

def online_only(func, self):
    def f(*args, **kwargs):
        if self.running:
            return func(*args, **kwargs)
        else:
            return False
    return f
class VM(object):
   @property
   def running(self):
       return True
   @property
   @online_only
   def diskinfo(self):
       return True
Run Code Online (Sandbox Code Playgroud)

我希望 diskinfo 仅在 VM.running 返回 True 时运行。如何让 online_only 能够读取 self.running?

python

4
推荐指数
1
解决办法
2671
查看次数

标签 统计

python ×2

django ×1

django-forms ×1

django-widget ×1