相关疑难解决方法(0)

Django:字段自身模型实例的默认值

如何为从模型的现有对象中获取的字段设置默认值?

我尝试过这些并没有奏效:

1)

class ModelA(models.Model):
    fieldA = models.CharField(default=self.get_previous())

    def get_previous(self):
        return ModelA.objects.all()[0].fieldA
Run Code Online (Sandbox Code Playgroud)

NameError: name 'self' is not defined

2)

class ModelA(models.Model):
    fieldA = models.CharField(default=ModelA.get_previous())

    @staticmethod
    def get_previous():
        return ModelA.objects.all()[0].fieldA
Run Code Online (Sandbox Code Playgroud)

NameError: name 'ModelA' is not defined

3)

class ModelA(models.Model):
    fieldA = models.CharField(default=get_previous())

def get_previous():
    return ModelA.objects.all()[0].fieldA
Run Code Online (Sandbox Code Playgroud)

NameError: global name 'get_previous' is not defined

4)

def get_previous():
    return ModelA.objects.all()[0].fieldA

class ModelA(models.Model):
    fieldA = models.CharField(default=get_previous())
Run Code Online (Sandbox Code Playgroud)

NameError: global name 'ModelA' is not defined

我很清楚为什么3)和4)不起作用.我可以想象为什么1)不会起作用 - 看起来类'本能不能引用实例(即自我).我可以想象为什么2)不起作用 - 显然没有对ModelA的引用,直到解释器将通过全班.

那我该怎么做呢?

django default field

19
推荐指数
1
解决办法
1万
查看次数

在Django中使用classmethod设置字段的默认值

我在网上发现了许多关于这个主题的类似帖子,但没有人明确说明哪个是问题.

class Item(models.Model):
    @classmethod
    def get_next_item_number(cls):
        return cls.objects.count() + 1

    number = models.IntegerField(default=get_next_item_number)
Run Code Online (Sandbox Code Playgroud)

问题

当我访问Django管理面板时,与'number'字段相关的文本字段包含

<classmethod object at 0x7fab049d7c50>
Run Code Online (Sandbox Code Playgroud)

所以我试着改变上面的代码

class Item(models.Model):
    @classmethod
    def get_next_item_number(cls):
        return cls.objects.count() + 1

    number = models.IntegerField(default=get_next_item_number())
Run Code Online (Sandbox Code Playgroud)

但是当我运行django服务器时,我得到:

number = models.IntegerField(default=get_next_item_number())
TypeError: 'classmethod' object is not callable
Run Code Online (Sandbox Code Playgroud)

我知道所有这一切都可以通过将get_next_item_number()声明为外部函数来防止,但这个解决方案对我来说并不优雅,因为get_next_item_number()仅指Item类.

我缺少一个解决方案吗?

python django django-models django-admin

7
推荐指数
1
解决办法
1482
查看次数

标签 统计

django ×2

default ×1

django-admin ×1

django-models ×1

field ×1

python ×1