Lagg,

The reason you have to use product.multicolorproduct.colors.all() is 
that the view is returning a Product instance. It is not returning a 
MultiColorProduct instance. If the view were modified so that `product` 
was a MultiColorProduct instance, then you could use 
product.colors.all(), as well as directly access all Product model 
fields, such as product.sku, product.slug, product.name, etc.

So, the gist is that unless you start writing your own views to 
supersede Satchmo's, Satchmo views always return Product instances. 
Django is great in that you don't even have to perform the 
MultiColorProduct lookup because the ORM returns it as a reverse lookup 
on the basis of it being an inherited model.

Bob

Lagg wrote:
> Just a follow-up:
>
> Yes, a listener on "satchmo_cart_details_query" did exactly what I
> needed (pretty much just like part 2&  3 of the above mentioned
> article)
>
> I hunted around for a signal for loading product, but there wasn't
> one, I didn't feel like adding one, and I decided that what I had from
> before would work if I just fleshed it out some more (and It did
> work!)
>
> Side Question:
>
> How come I have to do "product.multicolorproduct.colors.all" to get
> the color list? Shouldn't it just be "product.colors.all"  ( I would
> think that product would be an instance of MultiColorProduct )?  I
> could only get the former to work, so I'm curious to wither that is a
> satchmo thing, or a python thing I just haven't seen before?
>
>
> On Aug 26, 8:35 am, Bob Waycott<[email protected]>  wrote:
>    
>> Lagg wrote:
>>      
>>> I was reading (*gasp*) more 
>>> ofhttp://thisismedium.com/tech/satchmo-diaries-part-one/
>>> - Part 2 and part 3 seem to describe what I want to do. (Part 3
>>> specifically with the modification of the cart details). I think this
>>> might be one solution to Question 2.
>>>        
>>> So, for Question 1, I'm going to assume that I need to hijack a signal
>>> from Product, and write a listener function to add a form object to
>>> the response, and then call that object in the template?
>>>        
>>> I'm not going to mark this as "Solved my own problem" because I'm
>>> still open to any ideas.
>>>        
>>> Thanks in advance!
>>>        
>>> On Aug 25, 12:36 pm, Lagg<[email protected]>    wrote:
>>>        
>>>> Thanks to help from the group, I was able to get a custom product
>>>> created, added to the admin, and show up in the store.  (I followed
>>>> the method described here 
>>>> :http://thisismedium.com/tech/satchmo-diaries-part-one/
>>>> )
>>>>          
>>>> The product (MultiColorProduct) I created only differs only from the
>>>> default Product in that it has a (one) ManyToManyField( called
>>>> 'colors' ) so that it can have multiple colors selected (Think tie dye
>>>> tshirt).
>>>>          
>>>> class MultiColorProduct(Product):
>>>>       objects = ProductManager()
>>>>          
>>>>       colors = models.ManyToManyField(Color)
>>>>          
>>>>       def __unicode__(self):
>>>>           return u'%s' % self.name
>>>>          
>>>> Now comes actually adding my MultiColorProducts to the cart.
>>>>          
>>>> Question 1)
>>>> How would be the best way to display a multiselect box with the
>>>> MultiColorProducts.colors as the options?
>>>> I did this in product/product.html
>>>>          
>>>> <select multiple="multiple" name="colors" id="id_colors">
>>>> {% for c in product.multicolorproduct.colors.all %}
>>>>       <option value="1">{{c.name}}</option>
>>>> {% endfor %}
>>>> </select>
>>>>          
>>>> Obviously "option value" needs to change for each product (I just
>>>> threw the code in there for proof of concept), but isn't there a more
>>>> django-esk way of getting that data displayed? A form class or model
>>>> form class of some sorts? If so, how would I get that class
>>>> instantiated since I'm taking Bob Waycott's advice and not messing
>>>> with any views.
>>>>          
>>>> Question 2)
>>>> How should I go about getting the custom product data saved to the
>>>> cart? Should I try to get the cart to recognize custom data as
>>>> CartDetail data? Should I extend Cart into a custom Cart model? Should
>>>> I do something completely different?
>>>>          
>> Do something like this?
>>
>> <form action="{% url satchmo_smart_add %}" method="post">
>> <input type="hidden" name="quantity" id="quantity" value="1" />
>> <input type="hidden" name="productname" id="productname"
>> value="{{product.slug}}" />
>> <input type="submit" class="button submit" id="submit" name="addcart"
>> value="Order Product"/>
>> </form>
>>
>> Passing a product.slug&  quantity to satchmo_smart_add should be all you
>> need to get an item in the cart.
>>
>> As for adding details to the cart, you are right on the money as far as
>> using a listener. It is the cleanest&  most maintainable way to take
>> care of that need, and exactly what signals are for -- which is why I
>> documented it in that blog post.
>>
>> Really, you shouldn't have to do much of anything special to get an item
>> into the Cart.
>>
>> As for your need on the multicolor options, your select box looks fine
>> to me. You don't have to create a form for every element. If you do want
>> to create a Django form, you may wind up having to create a custom view
>> (note, I said custom view, not modify Satchmo's views).
>>
>> Customizing Satchmo for your needs is always going to lead you down the
>> path of writing code. The more you want to customize, the more you will
>> be coding.
>>
>> Happy coding!
>>      
> >
>    

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Satchmo users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/satchmo-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to