2016-10-09 40 views
1

最近、私は製品を内部に持つことができる私のウェブサイト用のサーバーサイドショッピングカートを作成する必要がありました。セッションクッキーでカートや商品を追加することもできますが、カスタムメイドユーザーモデルに追加することをお勧めします。Django:ショッピングカートを正しく作るには? (配列文字列フィールド)

ショッピングをしているのでカート、私はそれのためのモデルを作る必要があります、それはオブジェクトとして製品を保持するので、彼らは簡単に使用することができますが、私は適切に行うための方法を見つけることができません。

class User(models.Model): 
    username = models.CharField(max_length=150) 
    joined = models.DateTimeField('registered') 
    avatar = models.CharField(max_length=300) 
    balance = models.IntegerField(default=0) 
    ban = models.BooleanField() 
    cart = models.??? 


    def __str__(self): 
     return self.username 

どのように私は、Djangoのシステムを使用して搭載したモデルで、配列の文字列を持つ達成することができますか?もしそうでなければ他のライブラリ(Json、Pickle)でも可能ですが、ForeignKeyでそれを行うことができます。もしそうなら、どうすれば可能ですか?

+0

http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad/3653574 – e4c5

答えて

2

この問題の文字列または文字列を格納する代わりに、DB関係を使用することをお勧めします。

DB関係を使用して問題を解決する場合は、ManyToManyFieldを使用する必要があります。

class User(models.Model): 
    ... 
    cart = models.ManyToManyField(Product) 

あなたの製品のモデルがあると仮定します。

class Product(models.Model): 
    name = models.CharField(max_length=30) 
    price = models.DecimalField(max_digits=8, decimal_places=2) 

カートに要素を追加するときは、このようなものを使用します。

tv = Product(name='LED TV', ...) 
tv.save() 
diego = User.objects.get(username='dalleng') 
diego.cart.add(some_product) 
+0

私は何もおかげで、シェルを入れる必要がありますか? 'Product'を試してみると、エラーが出ます:' NameError:name 'Product' is not defined ' – ShellRox

+1

私はあなたがすでに製品モデルを作成していると仮定しています。 Djangoシェルを使用しているときは、すべてのモデルをインポートする必要があります。 –

+0

私は 'cart = models.ManyToManyField(Product)'の中に入れなければならないことを理解していないのは残念ですが、製品を置き換えることができるので、2つの引数をとります。 NameErrorが返されます。 – ShellRox

関連する問題