首页 > 解决方案 > 字段“tag_number”需要一个数字,但得到“КР-02211”

问题描述

我有这个问题,我的 urls.py 是:

path('cabinet/<str:pk>/update/',
         views.BookUpdateView.as_view(),
         name='book-update'),

模型.py

tag_number = models.PositiveIntegerField('Tag number', validators=[
        MinValueValidator(1),
        MaxValueValidator(MAX_TAG_NUMBER),
    ])

视图.py

class BookUpdateView(core.UpdateView):
    form_class = TagForm
    template_name = 'book_update.html'

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.tag_number = self.object.generate_tag()
        self.object.save()
        return super().form_valid(form)

为什么我有这个错误?

Field 'tag_number' expected a number but got 'КР-02211'.

标签: django-modelsdjango-viewsdjango-urls

解决方案


.generate_tag()不会返回您的tag_name字段可接受的类型的对象。实际上,您的tag_name字段是 a PositiveIntegerField,这意味着它只能存储整数,而不是文本。但是,您会generate_tag()返回KP-02211,虽然它确实以数字序列结尾,但它以 开头KP-,并且无法存储。

您可以将字段更改为 a CharField,例如:

class SomeModel(models.Model):
    # …
    tag_number = models.CharField(max_length=10)

或者您可以更改generate_tag方法以仅返回 1 和MAX_TAG_NUMBER.


推荐阅读