Django

2010-10-02 15 views
6

को हटाने पर कैस्केडिंग नहीं कर रहा है, मैं अब भी एक और अधिक महसूस कर रहा हूं कि मैं अभी भी एक Django नोब हूं, मुझे यह पता लगाना प्रतीत नहीं होता कि मेरे डेटा मॉडल के साथ क्या हो रहा है और यह कैलिडिंग डिलीट क्यों नहीं है। मेरा मॉडल यहाँ है।Django

class message(models.Model): 
    msg_text = models.CharField(max_length = 9900) 
    date_time = models.DateTimeField() 
    is_read = models.BooleanField(default=False) 


class thread(models.Model): 
    message = models.ForeignKey(message) 
    subject = models.CharField(max_length=160) 
    from_user = models.ForeignKey(User, related_name = 'from_user') 
    to_user = models.ForeignKey(User, related_name = 'to_user') 
    thread_id = models.CharField(max_length = 36) 

def __unicode__(self): 
    return self.subject 

और फिर यहाँ मेरी हटाने समारोह

def delete_message(request, thread_id): 
    t = thread.objects.get(id=thread_id) 
    thread.objects.filter(thread_id = t.thread_id).delete() 

    return HttpResponseRedirect(reverse("inbox.views.index")) 

है इसलिए हर धागा इसे से जुड़े संदेशों, और सभी धागे कि संबंधित संदेश (यानी उत्तर) होते हैं सब एक धागा आईडी के साथ जुड़े हुए हैं है जो एक यादृच्छिक रूप से जेनरेट की गई स्ट्रिंग है। तो जब मैं हटाता हूं तो मुझे प्रारंभिक थ्रेड आईडी (डीजेंगो ऑटो-जेनरेट आईडी) मिलती है और उसके बाद अद्वितीय थ्रेड आईडी को पकड़ने और उस थ्रेड आईडी वाली सभी प्रविष्टियों को हटाने के लिए इसका उपयोग करें। हालांकि जब मैं धागे को हटा देता हूं तो यह ऑटो-कैस्केडिंग और संबंधित संदेश ऑब्जेक्ट्स को हटा नहीं रहा है।

अजीब बात यह है कि यह पहले काम करता था, लेकिन फिर काम करना बंद कर दिया, मुझे यकीन नहीं है कि क्यों। कोई विचार?

उत्तर

4

Django संस्करण 1.3 में एक on_delete पैरामीटर जो determinates "ondelete" कार्रवाई, उदाहरण के लिए है:

def get_sentinel_user(): 
    return User.objects.get_or_create(username='deleted')[0] 

class MyModel(models.Model): 
    user = models.ForeignKey(User, on_delete=models.SET(get_sentinel_user)) 

तो शायद कोशिश:

class thread(models.Model): 
    message = models.ForeignKey(message, on_delete=models.CASCADE) 
    ... 

स्रोत http://docs.djangoproject.com/en/1.3/ref/models/fields/

1

ऐसा नहीं है कि कैस्केडिंग काम कैसे हटाते हैं। चूंकि thread में message पर एक विदेशी कुंजी है, यदि आप message हटाते हैं, तो कैस्केडिंग प्रभाव सभी संबंधित thread एस को हटाना है। अधिक जानकारी और उदाहरण के लिए दस्तावेज़ देखें:

आप जुड़े संदेश पर delete कह सकते हैं कि अगर तुम क्या चाहते हो।