首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django错误: ValueError at / Field 'ticket_id‘期望一个数字,但得到'NS000001’

Django错误: ValueError at / Field 'ticket_id‘期望一个数字,但得到'NS000001’
EN

Stack Overflow用户
提问于 2022-09-18 08:59:14
回答 1查看 48关注 0票数 0

在插入数据时,我得到了这个错误。这可能是由于默认主键的更改所致。我不想输入ticket_id字段,因为我已经为该字段设置了默认值(默认值=‘as 000001’)

models.py

代码语言:javascript
复制
class Ticket(models.Model):
    ticket_id = models.AutoField(primary_key=True, default='NS000001', editable=False)
    server_details = models.CharField(max_length=100)
    send_date = models.DateTimeField(default=timezone.now)
    license_no = models.CharField(max_length=25)
    file = models.FileField(upload_to='documents/%Y/%m/%d/')
    
    def __str__(self):
        return self.ticket_id

views.py

代码语言:javascript
复制
def Index(request):
    if request.method == "POST":
        form = SaveTicket(request.POST,request.FILES or None) 
        if form.is_valid():
            form.save()
            print(form)
            return redirect('index')
    else:
        form = SaveTicket()
    return render(request, 'index.html')

forms.py

代码语言:javascript
复制
class SaveTicket(forms.ModelForm):
    class Meta:
        model = Ticket
        fields = ['server_details','send_date','license_no','file']
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-18 10:57:03

第一

你不需要自己定义Autofield。

代码语言:javascript
复制
class Ticket(models.Model):
    server_details = models.CharField(max_length=100)
    send_date = models.DateTimeField(default=timezone.now)
    license_no = models.CharField(max_length=25)
    file = models.FileField(upload_to='documents/%Y/%m/%d/')

第二

如果您的票证ID是静态的,您可以创建一个属性:

代码语言:javascript
复制
class Ticket(models.Model):

    ...  # any staff here

    @property
    def ticket_id(self):
        return f'NS{(self.pk or 0):06d}'

最后的

在此之后,您可以在任何地方使用它:

代码语言:javascript
复制
print(ticket.ticket_id)
>>>'NS2134154'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73761357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档