6

समस्या: मुद्दा मैं चयन मॉडल के भीतर विकल्प का मूल्य हो रही है हो रहा है। ऐसा इसलिए है क्योंकि, अन्य विकल्प एक ही कार्ट के भीतर भी हैं, कुल उत्पन्न करने के लिए अलग-अलग कीमतों का उपयोग किया जाएगा। मैं, एक क्वेरीसमूह कि मुझे विकल्प की कीमत हो जाता है साथ मदद की जरूरत है, तो विकल्प एक effector_option है कि अपने आप में एक ही गाड़ी के भीतर है इस्तेमाल किया है कि, नहीं तो एक ही विकल्प क्षेत्र सेट के साथ रूपांतर का उपयोग करें। वहाँ कई धारा एक पृष्ठ पर हो सकता हैDjango: यदि वस्तु (else if) क्वेरीसमूह में मौजूद है जाँच हो रही है

class Section(models.Model): 
    title = models.CharField(max_length=20) 
    description = models.CharField(max_length=100) 
    temp = models.ForeignKey(TempName, null=False) 
    def __str__(self): 
     return self.title 
    def get_options(self): 
     return self.option_set.all() 

class Option(models.Model): 
    name = models.CharField(max_length=120) 
    section = models.ForeignKey(Section, null=False) 
    def __str__(self): 
     return self.name 
    def get_variations(self): 
     return self.variation_set.all() 

class Variation(models.Model): 
    name = models.CharField(max_length=60, blank=True, unique=True) 
    price = models.DecimalField(max_digits=5, decimal_places=2) 
    option = models.ForeignKey(Option, null=False) 
    effector_option = models.ForeignKey(Option, null=True, blank=True, related_name='option_effected') 
    def __str__(self): 
     return self.name 

:

TempName अनुप्रयोग मॉडल के होते हैं। प्रत्येक धारा में कई विकल्प शामिल हो सकते हैं जो बाद में उपयोगकर्ता द्वारा चयन योग्य होगा। चयनित विकल्प कार्ट में जाएगा जो कुल मूल्य उत्पन्न करने के लिए उपयोग किया जाएगा।

भीतर रूपांतर मॉडल, क्षेत्र विकल्प बस मुझसे कहता है जो विकल्प रूपांतर के अंतर्गत आता है। effector_optionके भीतर क्षेत्र Varaition मॉडल हालांकि कार्ट द्वारा उपयोग किया जाएगा।

उपयोगकर्ता, विकल्प के किसी भी संख्या को चुनने के लिए अनुमति दी जाएगी लेकिन, पर विकल्प उपयोगकर्ता चयनित निर्भर करता है, अन्य विकल्प रूपांतर कीमत जहां effector_option पहले से चयनित किया गया था प्रदर्शित कर सकता है। गाड़ी कई विकल्प जो उपयोगकर्ता का चयन किया है शामिल कर सकते हैं

class Cart(models.Model): 
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True) 
    creation_date = models.DateTimeField(verbose_name='creation date') 
    checked_out = models.BooleanField(default=False, verbose_name='checked out') 
    class Meta: 
     verbose_name = 'cart' 
     verbose_name_plural = 'carts' 
     ordering = ('-creation_date',) 
    def __str__(self): 
     return unicode(self.creation_date) 
    def get_selections(self): 
     return self.selection_set.all() 


class Selection(models.Model): 
    cart = models.ForeignKey(Cart) 
    option = models.ForeignKey(Option) 
    @property 
    def price(self): 
     return 10 

:

कार्ट अनुप्रयोग मॉडल के होते हैं। प्रत्येक चयन में एक मूल्य संपत्ति होगी जिसका उपयोग उपयोगकर्ता को उस व्यक्तिगत चयन की कीमत दिखाने के लिए किया जा सकता है, जिस पर विकल्प एक ही कार्ट में है।

मैं क्या प्रयास किया है:

विकल्प के सभी रूपों प्राप्त करें। फिर प्रत्येक भिन्नता के माध्यम से लूप करें और जांचें कि Variation.effector_option उसी कार्ट के भीतर निहित है या नहीं। यदि ऐसा मूल्य प्रदर्शित होता है, अन्यथा भिन्नता के भीतर मूल्य प्रदर्शित करें जहां Variation.effector_option शून्य/सेट नहीं है।

मुझे जो मिला वह यह था कि कार्ट में प्रत्येक चयन के लिए 26 से अधिक प्रश्न पूछे जा रहे थे। क्या इस डीबी स्कीमा को अधिक सामान्यीकृत करने की आवश्यकता है या क्या यह इस सरल परियोजना के लिए पर्याप्त है?

+0

क्वेरी (क्वेरीसेट ऑपरेटर) और लूप नहीं के बारे में पढ़ें। – philipxy

+0

@philipxy हाँ मैंने ऐसा किया है, हालांकि मेरे पास जो समस्या है, वह एक क्वेरीसेट से पूछताछ कर रहा है, फिर क्वेरी के परिणामस्वरूप पूछताछ करें। बीमारों ने फिर से दस्तावेज़ों के उस हिस्से के माध्यम से एक और पढ़ा है, शायद मुझे कुछ याद आ गया है। –

+1

Google 'stackoverflow.com django अन्य क्वेरी का क्वेरी परिणाम'। – philipxy

उत्तर

3

मुझे जो मिला वह यह था कि कार्ट में प्रत्येक चयन के लिए 26 से अधिक प्रश्न बुलाए जा रहे थे। क्या इस डीबी स्कीमा को अधिक सामान्यीकृत करने की आवश्यकता है या क्या यह इस सरल परियोजना के लिए पर्याप्त है?

मैं काट दूंगा क्योंकि मेरा मानना ​​है कि इसका समाधान सॉफ्टवेयर इंजीनियरिंग है। यहां मुद्दा सामान्यीकरण नहीं है, न ही यह Django है। यह आपने समस्या को व्यवस्थित करने के लिए कैसे चुना है। मैं अनुमान लगाता हूं कि आप कुछ जाल में गिर गए हैं जिन पर हम चर्चा करेंगे। पहले के अपने खुद के साथ शुरू सीधे यहाँ कुछ परिभाषाओं मिलता है ...

  • धारा - एक मूल्य
  • रूपांतर - - विकल्प
  • विकल्प के एक समूह के लिए विकल्पों मॉडल करने के लिए कोई प्रयास है कि अन्य विकल्पों को प्रभावित करें

अब हमारे पास यह समस्या सही है? मेरे Option चयनों में से कुछ का उपयोग अन्य Option चयनों के साथ किया जा सकता है और कीमत को प्रभावित कर सकते हैं! अराजकता! हमें उनकी बातचीत के लिए मेटा नियम प्रदान करने के लिए Variation की आवश्यकता है। अधिक प्रश्न! अधिक तर्क! हो सकता है कि ...

जाल 1

जिस तरह से चीजें स्क्रीन पर देखने के लिए दे ड्राइव अपने डेटा मॉडल

मैं यहाँ अनुमान लगा रहा हूँ, लेकिन Section शब्द और Option मेकअप के उपयोग मुझे लगता है कि आप एक स्क्रीन व्यवस्थित कर रहे हैं, न कि डेटाबेस। अधिक सामान्यतः व्यवसायों मॉडल को निम्न रूप में है ...

  • Product - कुछ हम बेचते हैं (name, base_price, options, option_sets)
  • OptionSet - विकल्प है कि एक पैकेज सौदा के रूप में एक साथ जाना के समूह! बचत के बारे में सोचो (name, group, options, price, optionset_exclusions, option_exclusions)
  • Option - एक ला कार्टे विकल्प (name, group, price)
  • Purchase - क्या किसी को खरीदने के लिए (product, options चाहता है , optionsets)

अब आप कह सकते हैं "मेरे अनुभागों के बारे में क्या!" प्रकार के साथ group नामक OptionSet और Option से मेटाडेटा के टुकड़े को लटकाने के रूप में अनुभाग कुछ आसान हो सकता है। अपने टेम्पलेट में प्रतिपादन करते समय आप group द्वारा विकल्पों/विकल्पों को समूहबद्ध कर सकते हैं। Product के लिए लोगों को Option और OptionSets चुनने से रोकने के लिए आप exclusions का उपयोग कर सकते हैं।अब इस पूरे शेबैंग को पृष्ठ पर 3 से अधिक प्रश्नों के साथ फिसल दिया जा सकता है (prefetch_related के उचित उपयोग के साथ) और Options/OptionSets चयनित एक निश्चित मूल्य प्राप्त करने के लिए बस एक साथ जोड़ा जा सकता है।

जाल 2

जिस तरह से आप यह इससे पहले कि आप "यह की Salvo लांच मेरे लिए काम नहीं कर सकते हैं अब सभी

पर काम से रोकने काम करना चाहता हूँ दे, मैं एक हिमपात का मैदान हूँ! "(यहां एक लंबा समय रहा)। अक्सर हम पाते हैं कि जिस तरह से हम काम करना चाहते हैं, वह काम करने के तरीके में खड़ा है।

पुराना यूनिक्स सिर संगति, सरलता और पूर्णता के गुणों पर बहस करता था। सर्वसम्मति यह है कि सरलता तब भी सर्वोत्तम है जब यह पूर्ण या संगत न हो। आपका मूल समाधान पूर्णता प्राप्त करने के लिए जटिलता का उपयोग करना चाहता है। यह एक जाल है! (धन्यवाद एडमिरल अकबर)

उदा। इस तरह से मेरा/मेरा ग्राहक का व्यवसाय काम करता है, इसलिए इसे

सॉफ़्टवेयर सरलता प्राप्त करने के तरीकों की तलाश करते समय लिखने के लिए सस्ता/आसान है। कभी-कभी इसका मतलब संगठन की सीमाओं के अनुरूप संगठन को बदलना है।

मैं एक प्रत्युत्तर कल्पना करो कि ऊपर कहा गया है करने के लिए

विकल्प 1 आप तुम बस स्थिर मूल्यों विकल्प 2. पर एक 10% छूट दे देंगे कर सकते हैं !.

इसे ऊपर की स्कीमा में मॉडलिंग किया जा सकता है जहां कुल मूल्य विकल्प 1 की कीमत + 9 (विकल्प 2 की कीमतें) के बराबर है। इस मामले में हमने अभी Variation की धारणा ली है और इसे व्यवहार के बजाय डेटा बना दिया है। बहुत आसान इसके लिए अधिक लचीला है। मेरा मतलब है कि आप कीमतों पर कुछ जटिल 3 डी वॉल्यूमेट्रिक कैलकुलेशन कर सकते हैं और परिणाम को अपने उत्पाद स्कीमा में प्रस्तुत कर सकते हैं। विचार करने के लिए और अधिक समस्याएं हैं ...

मैं यह सब कॉन्फ़िगरेशन हाथ से नहीं करना चाहता!

खुद को एक Django प्रबंधन कमांड लिखें जो एक स्प्रेडशीट से आयात करता है।

क्या होगा यदि Options के बीच कीमत या रिश्ते बदलते हैं?

अधिकांश उत्पाद/मूल्य स्कीमा के Option_spec तरह _spec की एक धारणा है कि आप प्वाइंट समय खरीद संदर्भ में कब्जा करने के लिए अनुमति देता है शामिल हैं। चीजें खरीदे जाने पर _spec रिकॉर्ड Purchase से जुड़े हुए हैं। यह Option और OptionSet को सभी कनेक्ट की गई पिछली खरीदारी को बदले बिना बदलने की अनुमति देता है।

और सूची पर चला जाता है ...

यहां मुद्दा यह है कि सभी समस्याओं को आप का सपना कर सकते हैं सरल समाधान है अगर तुम चतुर और खुले दिमाग कर रहे हैं।

+0

एक बहुत व्यापक उत्तर के लिए धन्यवाद। मैं आपको बताए गए प्रत्येक "ट्रैप" में देख रहा हूं। –

संबंधित मुद्दे