Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问django模型的实例化属性_Python_Django_Django Models - Fatal编程技术网

Python 如何访问django模型的实例化属性

Python 如何访问django模型的实例化属性,python,django,django-models,Python,Django,Django Models,models.py from django.db import models from alpha_id import get_alpha_id class Sample(models.Model): alpha_id = get_alpha_id(self.id) sample_name = models.CharField(max_length=30) entry_date = models.DateField(auto_now_add=True)

models.py

from django.db import models

from alpha_id import get_alpha_id


class Sample(models.Model):
    alpha_id = get_alpha_id(self.id)
    sample_name = models.CharField(max_length=30)
    entry_date = models.DateField(auto_now_add=True)


    def __unicode__(self):
        return self.alpha_id
alpha_id.py

import string

ALL_LETTERS = string.ascii_uppercase.replace('F', '').replace('I', '').replace('L', '').replace('O', '').replace('V', '')

def get_alpha_id(id):
    """ Return the alpha numeric ID according to the current 
        integer id.
    """
    global ALL_LETTERS
    alpha =  ALL_LETTERS[(id%len(ALL_LETTERS))-1]
    return str(id) + '_' + alpha
在这里,我试图创建一个alpha_id模型属性,该属性基于自动创建的整数id属性建立一个字母数字id。我编写了一个执行算法的函数,我只需要向该方法发送当前实例化模型的id。例如:

>>> get_alpha_id(1)
1_A
>>>get_alpha_id(2)
2_B
不管怎样,我已经弄明白了逻辑。我需要做的就是弄清楚如何将示例模型的当前实例化的id属性传递给该函数

显然,我这里的问题是我没有引用类示例的实例化,因此使用“self.id”会导致错误。具体而言:

alpha_id = get_alpha_id(self.id)
NameError: name 'self' is not defined
我有一种感觉,解决方案涉及到定义一个uu init_u方法,但我不太确定我将如何去做。我查看了Model.py基类,但找不到id属性的定义位置


总之,如何访问实例化django模型的当前id,以便使用该整数值通知另一个属性的创建?

您需要使用实例方法上的
@property
装饰器将其作为实例属性,而不是将
alpha_id
作为类属性:

class Sample(models.Model):
    sample_name = models.CharField(max_length=30)
    entry_date = models.DateField(auto_now_add=True)

    @property
    def alpha_id(self):
        return get_alpha_id(self.id)

    def __unicode__(self):
        return self.alpha_id

您需要使用实例方法上的
@property
装饰器将其设置为实例属性,而不是将
alpha_id
设置为类属性:

class Sample(models.Model):
    sample_name = models.CharField(max_length=30)
    entry_date = models.DateField(auto_now_add=True)

    @property
    def alpha_id(self):
        return get_alpha_id(self.id)

    def __unicode__(self):
        return self.alpha_id

您需要使用实例方法上的
@property
装饰器将其设置为实例属性,而不是将
alpha_id
设置为类属性:

class Sample(models.Model):
    sample_name = models.CharField(max_length=30)
    entry_date = models.DateField(auto_now_add=True)

    @property
    def alpha_id(self):
        return get_alpha_id(self.id)

    def __unicode__(self):
        return self.alpha_id

您需要使用实例方法上的
@property
装饰器将其设置为实例属性,而不是将
alpha_id
设置为类属性:

class Sample(models.Model):
    sample_name = models.CharField(max_length=30)
    entry_date = models.DateField(auto_now_add=True)

    @property
    def alpha_id(self):
        return get_alpha_id(self.id)

    def __unicode__(self):
        return self.alpha_id

这非常有效。我得仔细看看这里到底发生了什么。谢谢。@Malonge For ref:,您也可以在
alpha\u id
方法中的属性中缓存id,这样您就不会每次都像这样运行函数:
if not hasattr(self),\u alpha\u id'):self.\u alpha\u id=get\u alpha\u id(self.id);返回自我。_alpha_id
,它工作得很好。我得仔细看看这里到底发生了什么。谢谢。@Malonge For ref:,您也可以在
alpha\u id
方法中的属性中缓存id,这样您就不会每次都像这样运行函数:
if not hasattr(self),\u alpha\u id'):self.\u alpha\u id=get\u alpha\u id(self.id);返回自我。_alpha_id
,它工作得很好。我得仔细看看这里到底发生了什么。谢谢。@Malonge For ref:,您也可以在
alpha\u id
方法中的属性中缓存id,这样您就不会每次都像这样运行函数:
if not hasattr(self),\u alpha\u id'):self.\u alpha\u id=get\u alpha\u id(self.id);返回自我。_alpha_id
,它工作得很好。我得仔细看看这里到底发生了什么。谢谢。@Malonge For ref:,您也可以在
alpha\u id
方法中的属性中缓存id,这样您就不会每次都像这样运行函数:
if not hasattr(self),\u alpha\u id'):self.\u alpha\u id=get\u alpha\u id(self.id);返回自我。_alpha_id