2016-04-08 24 views
0

私はdjangoに取り組んでおり、問題に固執しています。私はそのタイムスタンプproduct_sync_tsより大きいテーブル製品から製品のすべてのIDを取得しようとしていますdjangoで 'long'オブジェクトに属性 'id'エラーがありません

tz = pytz.timezone('Asia/Kolkata') 
    product_sync_ts= datetime.now(tz) 
    product_sync_ts = "2016-03-10 14:41:48.901013+05:30" 
    product = Product.objects.filter(update_ts__lt=product_sync_ts , enabled_flag = True ,).values_list('id', flat=True) 
    product_upcs = ProductUPC.objects.filter(update_ts__lt = product_sync_ts , enabled_flag=True).values_list('product' , flat=True) 

    print product 
    print product_upcs 

:これはviews.pyためのコードスニペットです。テーブルProductUPCでも同じことをしています。

productUPCモデル

class ProductUPC(models.Model): 
    product = models.ForeignKey('Product', related_name='upcs') 
    upc = models.CharField(max_length=20, unique=True, null=False) 
    install_ts = models.DateTimeField(auto_now_add=True) 
    update_ts = models.DateTimeField(auto_now=True) 
    enabled_flag = models.BooleanField(default=True) 

製品モデル

class Product(models.Model): 
    name = models.TextField() 
    price = models.IntegerField() 
    enabled_flag = models.BooleanField(default=True) 
    install_ts = models.DateTimeField(auto_now_add=True) 
    update_ts = models.DateTimeField(auto_now=True) 

私は取得していますエラーは次のとおりです。

'long' object has no attribute 'id' 
Request Method: GET 
Request URL: http://127.0.0.1:8000/products/ 
Django Version: 1.8 
Exception Type: AttributeError 
Exception Value:  
'long' object has no attribute 'id' 

トレースバック:

/Users/folder/venv/lib/python2.7/site-packages/django/core/handlers/base.py in get_response 
        response = middleware_method(request, callback, callback_args, callback_kwargs) 
        if response: 
         break 
      if response is None: 
       wrapped_callback = self.make_view_atomic(callback) 
       try: 
           response = wrapped_callback(request, *callback_args, **callback_kwargs) ... 
       except Exception as e: 
        # If the view raised an exception, run it through exception 
        # middleware, and if the exception middleware returns a 
        # response, use that. Otherwise, reraise the exception. 
        for middleware_method in self._exception_middleware: 
         response = middleware_method(request, e) 

答えて

0

product_sync_tsは文字列ですが、フィールドupdate_tsDateTimeFieldあるので、あなたは、update_ts__gt=product_sync_tsを行うことはできません。最初に変数product_sync_tsをDateTimeFieldに変換してからクエリを実行する必要があります。

+0

私はupdate_tsをstringに変換できませんか? –

+0

私はあなたの質問を理解していません。個々の 'update_ts'値を文字列に変換することはできますが、django ORMクエリを行うために文字列形式を使うことはできません。 –

+0

ええ、そういう愚かな質問に申し訳ありません;) –