所以,我一直在尝试使用自定义函数Trade
中的标识符的初始值创建模型gen_rand_string()
的对象。
但问题是,我正在初始化它。
如果我删除初始值设定项并将UUIDField
设置为NULL
,那就可以了。
这是错误,我得到了:
/ admin / account / trade / add /
中的TypeErrorint()参数必须是字符串或数字,而不是' Trade'
我的交易类:
class Trade(models.Model):
NEW_TRADE = 'N'
CANCELLED_TRADE = 'C'
PENDING_TRADE = 'P'
STATUS_OF_TRADE = (
(NEW_TRADE, "New"),
(CANCELLED_TRADE, "Cancelled"),
(PENDING_TRADE, "Pending")
)
TYPE_BUY = 'B'
TYPE_SELL = 'S'
TYPE_OF_TRADE = (
(TYPE_BUY, "Buy"),
(TYPE_SELL, "Sell")
)
user = models.OneToOneField('UserProfile', related_name='trades')
identifier = models.UUIDField(null=False, editable=False)
created_at = models.DateTimeField(auto_now_add=True, editable=False)
finished_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(max_digits=19, decimal_places=10, null=False)
type = models.CharField(max_length=2, choices=TYPE_OF_TRADE, null=False)
status = models.CharField(max_length=2, choices=STATUS_OF_TRADE, default=PENDING_TRADE, null=False)
def __init__(self, *args, **kwargs):
self.identifier = gen_rand_string()
super(Trade, self).__init__(self, *args, **kwargs)
class Meta:
ordering = ('created_at',)
def __unicode__(self):
return self.identifier
def __str__(self):
return self.identifier
我的 gen_rand_string():
def gen_rand_string(purpose=''):
if purpose:
return purpose + '_' + get_random_string(length=64 - len(purpose))
else:
return get_random_string(length=64)
我为每笔交易制作一个随机字符串并不是更好的方式,有人会建议一些更好的选择,或者他们会在他们的位置拥有它。
我正在使用python 2.7,这是我以不同方式初始化对象的原因
感谢。
答案 0 :(得分:1)
不鼓励您为Django模型覆盖__init__
。您使用gen_rand_string
作为字段的默认值:
identifier = models.UUIDField(null=False, editable=False, default=gen_rand_string)
但是,您可能不需要定义自己的gen_rand_string
方法 - 只需使用uuid.uuid4
,就像UUIDField
的文档一样。
identifier = models.UUIDField(null=False, editable=False, default=uuid.uuid4)
答案 1 :(得分:0)
问题在于你的init函数语法。
def __init__(self, *args, **kwargs):
super(Trade, self).__init__(self, *args, **kwargs)
self.identifier = gen_rand_string()