Python 以10为基数的int()的文本无效:';需要适度';

Python 以10为基数的int()的文本无效:';需要适度';,python,django,Python,Django,在过去,我已经多次解决这个问题,在我的实践中,这只与日期时间字段问题有关。目前我无法确定 这个错误的原因是什么,这真的令人沮丧。我发布了完整的模型及其视图和精确的功能,其中有回溯点 找出代码中的错误。不过,我还添加了产品模型的日期时间字段,我相信在文章末尾有一个ForeignKey字段 可能不相关,但可能会有所帮助。对这个问题稍作解释也会大有帮助。请告知 ProductReview模型: class ProductReview(models.Model): product = model

在过去,我已经多次解决这个问题,在我的实践中,这只与日期时间字段问题有关。目前我无法确定 这个错误的原因是什么,这真的令人沮丧。我发布了完整的模型及其视图和精确的功能,其中有回溯点 找出代码中的错误。不过,我还添加了产品模型的日期时间字段,我相信在文章末尾有一个ForeignKey字段 可能不相关,但可能会有所帮助。对这个问题稍作解释也会大有帮助。请告知

ProductReview模型:

class ProductReview(models.Model):
    product = models.ForeignKey(
        'catalogue.Product', related_name='reviews', null=True,
        on_delete=models.SET_NULL)
    SCORE_CHOICES = tuple([(x, x) for x in range(0, 6)])
    score = models.SmallIntegerField(_("Score"), choices=SCORE_CHOICES)
    title = models.CharField(
        verbose_name=pgettext_lazy(u"Product review title", u"Title"),
        max_length=255, validators=[validators.non_whitespace])
    body = models.TextField(_("Body"))
    user = models.ForeignKey(
        AUTH_USER_MODEL, related_name='reviews', null=True, blank=True)
    name = models.CharField(
        pgettext_lazy(u"Anonymous reviewer name", u"Name"),
        max_length=255, blank=True)
    email = models.EmailField(_("Email"), blank=True)
    homepage = models.URLField(_("URL"), blank=True)
    FOR_MODERATION, APPROVED, REJECTED = 0, 1, 2
    STATUS_CHOICES = (
        (FOR_MODERATION, _("Requires moderation")),
        (APPROVED, _("Approved")),
        (REJECTED, _("Rejected")),
    )
    status = models.SmallIntegerField(
        _("Status"), choices=STATUS_CHOICES, default="Requires moderation")
    total_votes = models.IntegerField(
        _("Total Votes"), default=0)  # upvotes + down votes
    delta_votes = models.IntegerField(
        _("Delta Votes"), default=0, db_index=True)  # upvotes - down votes
    date_created = models.DateTimeField(auto_now_add=True)
    objects = ProductReviewQuerySet.as_manager()
    class Meta:
        app_label = 'reviews'
        ordering = ['-delta_votes', 'id']
        unique_together = (('product', 'user'),)
        verbose_name = _('Product review')
        verbose_name_plural = _('Product reviews')

    def save(self, *args, **kwargs):
        super(ProductReview, self).save(*args, **kwargs) #This line shows error
        self.product.update_rating()
视图:

在视图表单_有效函数中:

def form_valid(self, form):
        response = super(CreateProductReview, self).form_valid(form)
        self.send_signal(self.request, response, self.object)
        return response
在Review中调用的相关模型包含几个日期字段:

class Product(models.Model):
    .....#fields intentionally not posted to keep question summarized on stackoverflow
    date_created = models.DateTimeField(_("Date created"), auto_now_add=True)
    date_updated = models.DateTimeField(
        _("Date updated"), auto_now=True, db_index=True)
回溯:

File "C:\Users\AliKhan\amazonclone\market\catalogue\reviews\views.py" in dispatch
  40.             request, *args, **kwargs)
File "C:\Users\AliKhan\amazonclone\market\catalogue\reviews\views.py" in form_valid
  54.         response = super(CreateProductReview, self).form_valid(form)
File "C:\Users\AliKhan\amazonclone\market\catalogue\reviews\models.py" in save
  108.         super(ProductReview, self).save(*args, **kwargs)
Exception Type: ValueError at /catalogue/new-product_4/reviews/add/
Exception Value: invalid literal for int() with base 10: 'Requires moderation'

您的
status
字段是一个
SmallIntegerField
,默认值为字符串“Requires Moderation”。不能将这样的字符串放在数字字段中


找到这一点的诀窍是找到代码中出现的
需要调整的地方。

仅与给定选择的人类可读字符串相关。相反,您需要使用表示默认选择的整数

models.SmallIntegerField(_("Status"), choices=STATUS_CHOICES, default=FOR_MODERATION)

错误很明显,您无法将字符串
'Requires moderation'
转换为int,你试过调试这个或检查你的演员试演吗?这样的话,它在Django Oscar一个电子商务网站上运行得非常好,我在那里复制了评论模型进行练习,我试图找到任何可能有助于改变行为的依赖项,但对他们来说效果很好,对我来说也应该很好。不是吗?
models.SmallIntegerField(_("Status"), choices=STATUS_CHOICES, default=FOR_MODERATION)