2010-09-25 18 views
7

मैं सामान्य संबंधों और Django परीक्षण-utils makefixture आदेश के लिए एक-से-एक संबंध समर्थन जोड़ने के लिए कोशिश कर रहा हूँ बनाने के लिए, यहाँ स्रोत http://github.com/ericholscher/django-test-utils/blob/master/test_utils/management/commands/makefixture.pyDjango, सामान्य संबंधों, जुड़नार

किसी विचारों कैसे करनी आवश्यक है है यह करो? या ऐसी चीज के लिए एक और उपकरण हो सकता है:

./manage.py dumpcmd User[:10] > fixtures.json 
+1

प्रासंगिक स्रोत शामिल करने के लिए प्रश्न संपादित करें। मैं यह देखने के लिए कि आप किस बारे में बात कर रहे हैं, किसी अन्य साइट पर क्लिक करने का प्रयास नहीं करने जा रहा हूं, और इस समस्या को खोजने के लिए किसी भी समस्या के लिए यह अधिक कठिन है। –

+0

आपको अपनी समस्या के बारे में कुछ विवरण जोड़ना चाहिए, आपके पास वास्तव में क्या समस्या है? –

उत्तर

1

आपके पास समस्या का समाधान करने के कई विकल्प हैं। मैं पोक-द-कोड अप्राच पर ध्यान केंद्रित करूंगा, क्योंकि यह थोड़ी देर के बाद से मैंने django internals के साथ mucked था।

मैंने लिंक से नीचे प्रासंगिक कोड शामिल किया है। ध्यान दें कि मैंने अप्रासंगिक भागों को हटा दिया है। यह भी ध्यान रखें कि जिस भाग को आप संपादित करेंगे आपका केस यहां को एक रिएक्टर की आवश्यकता है।

जब तक आप संतुष्ट न हों, निम्न एल्गोरिदम का पालन करें।

  1. फ़ील्ड (एक या अधिक) अलग-अलग फ़ंक्शन (ओं) के आधार पर if विवरणों को रेफैक्टर करें।
  2. जब तक आप यह पता नहीं लगाते कि कौन से क्षेत्र सामान्य संबंधों के अनुरूप हैं, निरीक्षण कोड जोड़ें।
  3. सामान्य संबंधों का पालन किए जाने तक निष्कर्षण कोड जोड़ें।
  4. टेस्ट।

    def handle_models(self, models, **options): 
    # SNIP handle options 
    
    all = objects 
    if propagate: 
        collected = set([(x.__class__, x.pk) for x in all]) 
        while objects: 
         related = [] 
         for x in objects: 
          if DEBUG: 
           print "Adding %s[%s]" % (model_name(x), x.pk) 
          # follow forward relation fields 
          for f in x.__class__._meta.fields + x.__class__._meta.many_to_many: 
           # YOU CASE HERE 
           if isinstance(f, ForeignKey): 
            new = getattr(x, f.name) # instantiate object 
            if new and not (new.__class__, new.pk) in collected: 
             collected.add((new.__class__, new.pk)) 
             related.append(new) 
           if isinstance(f, ManyToManyField): 
            for new in getattr(x, f.name).all(): 
             if new and not (new.__class__, new.pk) in collected: 
              collected.add((new.__class__, new.pk)) 
              related.append(new) 
          # SNIP 
         objects = related 
         all.extend(objects) 
    
    # SNIP serialization 
    
संबंधित मुद्दे