Python “NoneType”对象没有“to_bytes”属性

Python “NoneType”对象没有“to_bytes”属性,python,django,forms,postgresql,base64,Python,Django,Forms,Postgresql,Base64,python新手,在解决错误代码方面有困难 我有一个表单,可以向postgresql数据库添加行。表单中有一个自动字段,它是my models.py中的主键。这样添加行是有效的,并且uniqueid字段的计数就像inteded 1,2,3 models.py: class forwards(models.Model): uniqueid = models.AutoField(primary_key=True) user = models.CharField(max_length

python新手,在解决错误代码方面有困难

我有一个表单,可以向postgresql数据库添加行。表单中有一个自动字段,它是my 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"]
我们的目标是使用主键值,它应该是一个整数,根据,将其转换为字节,然后执行字节到base64的转换以创建一个短码url。我想把这个短代码存储在表中。我尝试在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,并且得到了一个非类型错误。我尝试将models.py修改为BigIntegerField和IntegerField,但没有成功。在我第一次提交表单时,将default=0添加到uniqueid=models.AutoFieldprimary\u key=True不会生成错误,但在提交第二个表单时,它会在列timestamp中给出一个error null值,这违反了not null约束

在我看来,uniqueid似乎不是一个整数。如何解决这个问题


谢谢你的帮助

自动字段由数据库本身设置,因此在保存后才能获取值。但是您当时没有保存,因为您将commit=False传递给了表单save;这将在内存中创建一个实例,但尚未将其发送到db

如果您想让它工作,您必须删除commit=False并接受两次保存到数据库的微小成本