'NoneType' 对象没有属性 'to_bytes'
'NoneType' object has no attribute 'to_bytes'
python 的新功能,很难解决错误代码。
我有一个向 postgresql 数据库添加行的表单。该表单有一个自动字段,它是我的 models.py 中的主键。像这样添加行,并且 uniqueid 字段像 inteded (1,2,3,...)
models.py:
class forwards(models.Model):
uniqueid = models.AutoField(primary_key=True)
user = models.CharField(max_length = 150)
urlA = models.CharField(max_length = 254)
counterA = models.DecimalField( max_digits=19, decimal_places=0,default=Decimal('0'))
urlB = models.CharField(max_length = 254)
counterB = models.DecimalField( max_digits=19, decimal_places=0,default=Decimal('0'))
timestamp = models.DateTimeField('date created', auto_now_add=True)
shortcodeurl = models.CharField(max_length = 254)
forms.py:
class AddUrlForm(forms.ModelForm):
class Meta:
model = forwards
# fields = '__all__'
exclude = ["user", "counterA", "counterB", "shortcodeurl", "uniqueid"]
目标是使用主键值(根据here应该是一个整数),将其转换为"bytes",然后进行字节到base64的转换以创建一个简码-url。我想将此短代码存储在 table 中。我尝试在 views.py
中执行此操作
views.py
def forwardthis(request):
forwardform = AddUrlForm(request.POST or None)
if forwardform.is_valid():
forward = forwardform.save(commit=False)
forward.user = request.user.username
uniqueid_local = forward.uniqueid
print(uniqueid_local)
uniqueid_local_bytes = uniqueid_local.to_bytes(3, byteorder='big')
shortcodeurl_local = urlsafe_base64_encode(uniqueid_local_bytes)
forward.shortcodeurl = shortcodeurl_local
forward.save()
我的问题:
我没有成功创建此短代码 URL 并且收到 "NoneType" 错误。我尝试将 models.py 修改为 BigIntegerField 和 IntegerField,但这没有用。在我第一次提交表单时将 " default=0 "
添加到 uniqueid = models.AutoField(primary_key=True)
没有产生错误,但是在提交第二个表单时,它给出了错误 null value in column "timestamp" violates not-null constraint
对我来说,uniqueid
似乎无法识别为整数。如何解决这个问题?
感谢您的帮助!
AutoFields 由数据库本身设置,因此在保存之前不要获取值。但是此时您还没有保存,因为您将 commit=False
传递给了表单保存;这会在内存中创建一个实例,但尚未将其发送到数据库。
如果你想让它工作,你将不得不删除那个 commit=False
并接受两次保存到数据库的(微小)成本。
python 的新功能,很难解决错误代码。
我有一个向 postgresql 数据库添加行的表单。该表单有一个自动字段,它是我的 models.py 中的主键。像这样添加行,并且 uniqueid 字段像 inteded (1,2,3,...)
models.py:
class forwards(models.Model):
uniqueid = models.AutoField(primary_key=True)
user = models.CharField(max_length = 150)
urlA = models.CharField(max_length = 254)
counterA = models.DecimalField( max_digits=19, decimal_places=0,default=Decimal('0'))
urlB = models.CharField(max_length = 254)
counterB = models.DecimalField( max_digits=19, decimal_places=0,default=Decimal('0'))
timestamp = models.DateTimeField('date created', auto_now_add=True)
shortcodeurl = models.CharField(max_length = 254)
forms.py:
class AddUrlForm(forms.ModelForm):
class Meta:
model = forwards
# fields = '__all__'
exclude = ["user", "counterA", "counterB", "shortcodeurl", "uniqueid"]
目标是使用主键值(根据here应该是一个整数),将其转换为"bytes",然后进行字节到base64的转换以创建一个简码-url。我想将此短代码存储在 table 中。我尝试在 views.py
中执行此操作views.py
def forwardthis(request):
forwardform = AddUrlForm(request.POST or None)
if forwardform.is_valid():
forward = forwardform.save(commit=False)
forward.user = request.user.username
uniqueid_local = forward.uniqueid
print(uniqueid_local)
uniqueid_local_bytes = uniqueid_local.to_bytes(3, byteorder='big')
shortcodeurl_local = urlsafe_base64_encode(uniqueid_local_bytes)
forward.shortcodeurl = shortcodeurl_local
forward.save()
我的问题:
我没有成功创建此短代码 URL 并且收到 "NoneType" 错误。我尝试将 models.py 修改为 BigIntegerField 和 IntegerField,但这没有用。在我第一次提交表单时将 " default=0 "
添加到 uniqueid = models.AutoField(primary_key=True)
没有产生错误,但是在提交第二个表单时,它给出了错误 null value in column "timestamp" violates not-null constraint
对我来说,uniqueid
似乎无法识别为整数。如何解决这个问题?
感谢您的帮助!
AutoFields 由数据库本身设置,因此在保存之前不要获取值。但是此时您还没有保存,因为您将 commit=False
传递给了表单保存;这会在内存中创建一个实例,但尚未将其发送到数据库。
如果你想让它工作,你将不得不删除那个 commit=False
并接受两次保存到数据库的(微小)成本。