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