2017-05-01 4 views
0

J'essaie d'écrire une base de la méthode d'expédition sur les deux par pays et aussi de base de poids dans django-oscar. Il semble que les méthodes d'expédition par défaut doivent également avoir cesLa méthode d'expédition par défaut dans django-oscar

 from oscar.apps.shipping.methods import Free, FixedPrice, NoShippingRequired 

Je n'exigé aucune de ce qui précède et ne ferait que fournir des rabais pour l'expédition grâce à des rabais.

Comment puis-je écrire par repository.py si je ne présente aucun de ces oscar.apps.shipping.methods libre importation, FixedPrice, NoShippingRequired

donc je peux écrire mon référentiel de classe (CoreRepository):

sans écrire

methods += [NoShippingRequired()] 

    methods += [FixedPrice()] 

    methods += [Free()] 

la méthode que je l'ai écrit est pas de code basé mais mis en œuvre dans le menu de navigation dans le tableau de bord. J'ai suivi ce qui suit pour régler mon envoi.

https://groups.google.com/forum/#!topic/django-oscar/H4tf20ujm8k

Lors des tests, sur la page « Menu d'expédition », à la fois le «HandDelivery et mon poids à base par bouton mode de livraison du pays est affiché au client. Ce qui signifie que le client peut cliquer sur le bouton HandDelivery même lorsque le client est basé à l'étranger. Je souhaitais désactiver le bouton "HandDelivery" sur la page de la méthode d'expédition. Les clients ne peuvent donc pas les sélectionner. Une autre option consiste à joindre un message à ce bouton pour indiquer clairement aux clients que cliquer sur ce bouton signifie organiser la collecte de l'article dans l'entrepôt dans la semaine suivant la réservation.

Comment afficher le message au client? Le client ne prend pas la page de paiement. Et un email est envoyé pour que les articles puissent être collectés dans les 7 jours? Comme similaire à argos, réserve, article, aller à la boutique, payer et collecter. Donc, je pourrais changer la description de 'HandDelivery' pour réserver. Alors le client ne paie pas mais paye à la collecte. Mais comment?

S'il vous plaît, aidez. Je vous remercie.

Cordialement

Répondre

2

EDIT: Apparemment, Oscar a plusieurs façons de définir l'expédition; mettre à jour la réponse aux méthodes de couverture définies dans le tableau de bord!


Une fois que vous avez forked Oscar's shipping app, vous pouvez remplacer la classe référentiel et seulement retourner l'expédition que vous voulez.

Si vous avez défini votre expédition en fonction du poids à travers le tableau de bord, vous pouvez l'obtenir avec le modèle WeightBased, et ne revenir que:

forked_apps/expédition/repository.py:

from oscar.apps.shipping import repository 
from oscar.core.loading import get_model 
from . import methods 

WeightBased = get_model('shipping', 'WeightBased') 

class Repository(repository.Repository): 
    def get_available_shipping_methods(self, basket, user=None, 
      shipping_addr=None, request=None, **kwargs): 

     if shipping_addr: 
      weightbased_set = WeightBased.objects.all() 

      if weightbased_set: 
       return (list(weightbased_set),) 

     # If no address was specified, or weight-based options are 
     # not available, return the "Reserve" shipping option 
     return (methods.Reserve(),) 

forked_apps/expédition/methods.py:

from oscar.apps.shipping import methods 

class Reserve(methods.NoShippingRequired): 
    code = 'RESERVE' 
    name = 'Reserve' 
    description = 'Items will be reserved at the warehouse for 7 days' 

paiement Retarder impliquerait bifurquer le payment app, et serait sa valeur propre question.

La documentation d'Oscar contient également de bonnes informations sur la personnalisation des options d'expédition dans la section "How to configure shipping".

+0

@JacobHumes Je comprends vos explications. J'ai une erreur Et ajoutera plus à ma demande afin que vous puissiez comprendre où je suis. Merci – evepokua

+0

J'ai ajouté plus de détails ci-dessus, pourriez-vous jeter un oeil et des conseils? Je vous remercie. @Jacob Hume – evepokua