2012-08-28 12 views
6

के लिए ऐसी कोई तालिका मैं वास्तव में सरल ब्लॉग अनुप्रयोग के लिए परीक्षण की एक जोड़ी लिखा है, लेकिन बहुत से संबंध बनाने के लिए कई विफल रहता है जब मैं परीक्षण चलाने: ./manage.py test myblogDjango परीक्षण: DatabaseError: ManyToManyField

DatabaseError: no such table: myblog_post_tag 

फिर भी जब मैं ./manage.py sql myblog कार्य करें:

BEGIN; 
CREATE TABLE "myblog_tag" (
    "id" integer NOT NULL PRIMARY KEY, 
    "name" varchar(50) NOT NULL 
) 
; 
CREATE TABLE "myblog_post_tag" (
    "id" integer NOT NULL PRIMARY KEY, 
    "post_id" integer NOT NULL, 
    "tag_id" integer NOT NULL REFERENCES "myblog_tag" ("id"), 
    UNIQUE ("post_id", "tag_id") 
) 
; 
CREATE TABLE "myblog_post" (
    "id" integer NOT NULL PRIMARY KEY, 
    "title" varchar(200) NOT NULL, 
    "pub_date" datetime NOT NULL, 
    "content" text NOT NULL 
) 
; 
COMMIT; 

यह एक मेज पैदा करता है, फिर भी यह इसलिए जब परीक्षण करने में विफल रहता है? किसी भी मदद की सराहना की है। यहाँ मेरी परीक्षा है:

class TagModelTest(TestCase): 

    def test_create_tags_for_posts(self): 
     # tests tagging posts, postodd will have tags 1 & 3, posteven will be 2 & 4 
     postodd = Post(
      title="testing odd tags", 
      pub_date=timezone.now(), 
      content='''hello everybody, we are testing some tagging 
       functionality here. This post should have odd tags.''', 
     ) 
     posteven = Post(
      title="test even tags", 
      pub_date=timezone.now(), 
      content ='''hello everybody, we are testing some tagging 
       functionality here. This post should have even tags.''', 
     ) 
     #save them to db 
     postodd.save() 
     posteven.save() 

     # create the tags 
     tag1 = Tag(name="1") 
     tag2 = Tag(name="2") 
     tag3 = Tag(name="3") 
     tag4 = Tag(name="4") 

     # save all tags to db 
     tag1.save() 
     tag2.save() 
     tag3.save() 
     tag4.save() 

     # create the many2many relationship 
     postodd.tag.add(tag1) 

और मेरे models.py अगर जरूरत:

from django.db import models 


class Tag(models.Model): 
    name = models.CharField(max_length=50) 

    def __unicode__(self): 
     return self.name 


class Post(models.Model): 
    tag = models.ManyToManyField(Tag) 
    title = models.CharField(max_length=200) 
    pub_date = models.DateTimeField(verbose_name="Date published") 
    content = models.TextField() 

    def __unicode__(self): 
     return self.title 

उत्तर

1

./manage.py sql myblog एसक्यूएल निष्पादित नहीं करता है, यह सिर्फ आउटपुट क्या यह पर अमल होगा यदि आप syncdb भाग गया।

इस मामले में, ऐसा लगता है कि तालिका आपके डीबी से गायब है।

यदि यह किसी मौजूदा ऐप में संशोधन का परिणाम था; उदाहरण के लिए आपने अभी अपने मॉडल में एक नया फ़ील्ड जोड़ा है; तो syncdb चल रहा है आपके डेटाबेस में परिवर्तनों को प्रभावित नहीं करेगा। syncdb कोई विनाशकारी संचालन नहीं करता है (जैसे टेबल या कॉलम जोड़ना या छोड़ना)।

इस मामले में आप कॉलम जोड़ने के लिए मैन्युअल रूप से क्वेरी चला सकते हैं; या syncdb के साथ अपनी टेबल ड्रॉप और पुन: बनाएँ।

चूंकि यह एक आम समस्या है क्योंकि अधिकांश लोग आपके लिए इन परिवर्तनों को संभालने के लिए south जैसे डेटा माइग्रेशन टूल का उपयोग करते हैं। दक्षिण बुद्धिमानी से इन छोटे बदलावों का प्रबंधन करेगा।

+2

लेकिन मैं syncdb का उपयोग नहीं कर रहा हूं। अभी मैं केवल परीक्षण चला रहा हूं, इसलिए जब मैं कोई परीक्षण चलाता हूं, तो क्या यह किसी भी परीक्षण डेटाबेस को नहीं बनाता है? – binarymac

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