django不考虑在_init中声明的模型字段__

django不考虑在_init中声明的模型字段__,django,model,field,Django,Model,Field,像这样使用模型类时: class MyModel(models.Model): def __init__(self, *args, **kwargs): self.myfield = models.Field() super(MyModel, self).__init__(*args, **kwargs) 它不考虑myfield(在管理表单中,保存对象时…) 但如果我这样声明: class MyModel(models.Model): myfie

像这样使用模型类时:

class MyModel(models.Model):
    def __init__(self, *args, **kwargs):
        self.myfield = models.Field()
        super(MyModel, self).__init__(*args, **kwargs)
它不考虑myfield(在管理表单中,保存对象时…)

但如果我这样声明:

class MyModel(models.Model):
    myfield = models.Field()
它很好用

为什么?

编辑


我想我有一个很好的理由:我有一个抽象类UploadItem,它定义了一个名为file的字段,如下所示:
self.file=models.FileField(upload\u to=upload\u to)
正如您所看到的,在每个子类中,我都必须使用适当的upload\u to变量调用parent init方法(比如视频模型)。所以我不能用正常的方法来完成它。

因为Django ORM代码在类定义过程中发挥了一些重要的元魔力(只需浏览Django/db代码,看看它有多神奇)。通过在_uinit__;()函数中动态创建字段,您正在完成一个结束运行


不以正常方式创建类是否有很好的理由?如果没有,则按正常方式进行。如果你确实有一个很好的理由,那么就准备好深入到池的最深处——Python和Django。

因为Django ORM代码在类定义过程中发挥了一些重要的元魔力(只需浏览Django/db代码,看看它有多神奇)。通过在_uinit__;()函数中动态创建字段,您正在完成一个结束运行


不以正常方式创建类是否有很好的理由?如果没有,则按正常方式进行。如果你确实有一个很好的理由,那么就准备好进入真正深入的池中——Python和Django。

upload\u to
属性设置一个动态路径绝对不是想要在模型字段声明中混日子的好理由


这是Django已经处理过的事情-如果您将
upload\u to
设置为可调用,则可以根据模型实例返回正确的值。请参阅。

upload\u to
属性设置一个动态路径绝对不是想要处理模型字段声明的好理由


这是Django已经处理过的事情-如果您将
upload\u to
设置为可调用,则可以根据模型实例返回正确的值。请参阅。

这似乎是wright的解决方案,但我不知道如何调用子回调,因为这不起作用:file=models.FileField(upload\u to=UploadItem.get\u目录)为什么不起作用?上载文件时调用回调。如果您对此功能有特定问题,请打开一个新问题。这似乎是wright的解决方案,但我不知道如何调用子回调,因为这不起作用:file=models.FileField(upload\u to=UploadItem.get\u目录)为什么不起作用?上载文件时调用回调。如果您对此功能有特定问题,请提出新问题。