我正在尝试将“product_id”与新产品一起添加到 MySQL 数据库,以便在运行 Django 的电子商务网站中使用。然后,我想使用这些 Product_id 值在电子商务网站内进行搜索。因此,它们的长度只需 5 个字符。
models.py 中的产品类如下所示:
from django.utils.crypto import get_random_string
class Product(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255)
category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE)
product_id = models.IntegerField(get_random_string(5, 1234567890)) # Max length 5, numerals only
description = models.TextField(blank=True, null=True)
price = models.FloatField()
当尝试将模型迁移到 MySQL 服务器时,我得到:
File "C:\Users\user\Desktop\ecommerce\apps\store\models.py", line 18, in <module>
class Product(models.Model):
File "C:\Users\user\Desktop\ecommerce\apps\store\models.py", line 22, in Product
product_id = models.IntegerField(get_random_string(5, 1234567890)) # Create a random numeric id for each product
File "C:\Users\user\Desktop\ecommerce\venv\lib\site-packages\django\utils\crypto.py", line 74, in get_random_string
return ''.join(secrets.choice(allowed_chars) for i in range(length))
File "C:\Users\user\Desktop\ecommerce\venv\lib\site-packages\django\utils\crypto.py", line 74, in <genexpr>
return ''.join(secrets.choice(allowed_chars) for i in range(length))
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\random.py", line 288, in choice
i = self._randbelow(len(seq))
TypeError: object of type 'int' has no len()
据我了解,我应该能够设置整数的长度并将其设置为数字id,以便每次在数据库中创建新产品时存储。
如果这个问题很愚蠢,我很抱歉,但这是我的第一个问题,我搜索后找不到解决方案。
值得一提的是,您正在将
int
类型传递给 string
方法。这就是错误所指示的内容。
使用
randint
将返回一个整数,最适合此用例。一种方法是重写模型保存方法:
from random import randint
class Product(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255)
category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE)
product_id = models.IntegerField(null=True, Blank=True) # Max length 5, numerals only
description = models.TextField(blank=True, null=True)
price = models.FloatField()
def save(self, **kwargs):
if not self.product_id:
self.product_id = randint(10000, 99999)
return super(Product, self).save(**kwargs)