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" は "User" インスタンスでなければなりません。

そのため、anon ユーザーのウィッシュリストを作成することはできません。また、wl_user = User_Wishlist() を実行しただけでは、ユーザー ID を割り当てないと、manytomany フィールド 'products' にアクセスできません。

これに関するヘルプは素晴らしいでしょう。ありがとう!

ps: anon ユーザーがサインアップしたら、このユーザーのウィッシュリストも保存したいのですが、それは後で問題になります

4

2 に答える 2

2

匿名ユーザーの概念が間違っているようです。データを特定の「ユーザー」にバインドしたい場合は、それらの「ユーザー」を作成する必要があります。そうしないと、セッションが期限切れになるか、「ユーザー」がブラウザのキャッシュをリセットするたびに、データが失われます。

「ユーザー」をどのように定義するかは、完全にあなた次第です。それは「カート」または「顧客」またはその他のものである可能性があります。Django の auth モジュールが提供するものとは異なる抽象化を使用できない理由はありません。

これを適切に実装しているほとんどのサイトでは、それほど多くない「匿名」セッションを、ある時点でオプションのアカウントにバインドできます (これは、oauth または openid ソリューションである可能性もあります)。

于 2013-04-17T20:17:32.813 に答える