2013-04-17 69 views
0

在我的django應用程序中,我有一個用戶願望清單功能。我希望匿名用戶可以將產品添加到他的願望清單中。使用會話來存儲來自匿名用戶的數據

models.py 

class User_Wishlist(models.Model): 
    created_by = models.ForeignKey(User, default=None, null =True, blank=True) 
    products = models.ManyToManyField(Products, null=True) 


# some Products model 

views.py 
# to add an item from the user wishlist 

def add_userwl(request, id): 
    products = Products.objects.filter(id__iexact=id) 
    product = products[0] 
    if request.user.is_authenticated(): 
     userwlt = get_sl(request, request.user) #gets the auth user wishlist 
     userwlt.products.add(product) 
     sl_products = userwlt.products.all() 
    else: 
     if "wl_user" in request.session: 
      wl_user = request.session["wl_user"] 
     else: 
      wl_user = User_Wishlist(created_by = request.user) #here lies the problem! 
      request.session["wl_user"] = wl_user 

     wl_user.products.add(product) 
     wl_products = wl_user.products.all() 

    return render_to_response('getsl.html', { 
     'wl_products':wl_products 
    }, context_instance=RequestContext(request)) 

錯誤:無法分配「」:「User_Wishlist.created_by」必須是「用戶」實例。

因此,它不能爲匿名用戶創建一個願望清單。此外,如果我只是做wl_user = User_Wishlist(),它不能訪問manytomany領域的'產品'沒有分配用戶ID。

對此的任何幫助將是偉大的。謝謝!

P.S:我也想保存該用戶的心願,一旦匿名用戶註冊,但那是以後的問題

回答

2

你的匿名用戶的概念似乎是錯誤的。如果您希望將數據綁定到某個「用戶」,則必須爲他們創建一個「用戶」。否則,無論何時會話過期或「用戶」重置其瀏覽器的緩存,數據都將消失。

現在如何定義'用戶'完全取決於您。它可能是'購物車'或'客戶'或其他任何東西。沒有理由不能使用不同的抽象,然後使用Django的驗證模塊提供的抽象。

大多數實施此功能的網站允許您的非常「匿名」會話在某個時間綁定到可選帳戶(這可能是oauth或openid解決方案)。

+0

感謝您的回覆!所以我創建了一個用戶,user = User(username = request.session.session_key)..不知道給session_key作爲用戶名還是id是apt,只是暫時做了測試。效果很好! 您如何看待我可以創建一個用戶對象,請記住,稍後我希望在用戶註冊時保存這些數據。 –

0

更簡單的解決方案是要求wishlis綁定到或者用戶對象或會話對象。因此,請允許這些字段爲空,並實現有利於用戶對象的邏輯。

相關問題