2017-01-23 4 views
0

これまで数回の問題を解決しましたが、これは日時フィールドの問題のみに関連していました。現在私は このエラーの理由を全く特定できません。これは本当にイライラしています。私は完全なモデルをそのビューと正確な関数で投稿しています。ここでトレースバックはコード内のエラー を示します。しかし、私は と思われる投稿の最後にForeignKeyフィールドに関連するProductモデルの日付時刻フィールドを追加しましたが、おそらくそれが役立つかもしれません。この問題についての少しの説明も大きな助けになるでしょう。お知らせ下さい。基数10のint()のリテラルが無効です: 'Moderationが必要です'

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() 

ビュー:ビューform_valid機能で

class CreateProductReview(CreateView): 
    template_name = "catalogue/reviews/review_form.html" 
    model = ProductReview 
    product_model = Product 
    form_class = ProductReviewForm 
    view_signal = review_added 

    def dispatch(self, request, *args, **kwargs): 
     self.product = get_object_or_404(
      self.product_model, pk=kwargs['product_pk']) 

     if not self.product.is_review_permitted(request.user): 
      if self.product.has_review_by(request.user): 
       message = _("You have already reviewed this product!") 
      else: 
       message = _("You can't leave a review for this product.") 
      messages.warning(self.request, message) 
      return redirect(self.product.get_absolute_url()) 

     return super(CreateProductReview, self).dispatch(
      request, *args, **kwargs) 

:レビューで呼び出さ

def form_valid(self, form): 
     response = super(CreateProductReview, self).form_valid(form) 
     self.send_signal(self.request, response, self.object) 
     return response 

関連モデルは、いくつかの日付フィールドが含まれています

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' 
+1

は、エラーが 'あなたは、文字列を変換することはできません明確であることを表す整数を使用する必要がありますキャストの試み? – EdChum

答えて

1

'Requires moderation'は、指定した選択肢の人間が読める文字列にのみ関連します。代わりに、あなたはこれをデバッグするか、あなたをチェックしようとした 'intにmoderation'`が必要ですあなたのデフォルトのための選択

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

あなたstatusフィールドが "モデレーションが必要" 文字列のデフォルト値を持つSmallIntegerFieldです。このような文字列を数値フィールドに入れることはできません。

これを見つけるのは、Requires Moderationがあなたのコードのどこにあるかを見つけることです。

+0

これはDjango-Oscarで実践のためのレビューモデルをコピーしたもので、動作を変更するのに役立つ依存関係を見つけようとしましたが、私にとってはうまくいくはずです。それじゃない? –

関連する問題