/ / Django मॉडल ऑब्जेक्ट से निपटने का सबसे अच्छा तरीका क्या है? - django, मॉडल, सहेजें

Django मॉडल ऑब्जेक्ट से निपटने का सबसे अच्छा तरीका क्या है? - django, मॉडल, बचाओ

मैं कैसे संभाल करने के लिए कुछ स्पष्ट सोच की जरूरत हैएक django मॉडल पर फ़ंक्शन को सहेजें। जैसा कि आप "नीचे देखेंगे कि मैं इस सुरुचिपूर्ण ढंग से करने के नुकसान पर हूं। मैं" पूरे ऑब्जेक्ट को किसी अन्य मॉड्यूल को पास करना चाहता हूं और वहां इसका विश्लेषण करता हूं। विश्लेषण को तोड़ने और मॉडल-थ्रेड में नहीं होने के लिए मेरी प्रेरणा यह है कि मैं अक्सर विश्लेषण बिट को परिष्कृत करूंगा। धन्यवाद।

models.py
from test_app.spam_analyzer import spam_checker
class SharedLink(models.Model):
link = models.URLField()
submitters_ip = models.IPAddressField()
flag = models.CharField()
def save(self, *args, **kwargs):
self.flag = spam_checker(self)
super(SharedLink, self).save(*args, **kwargs)

spam_analyzer.py
from test_app.models import SharedLink #this causes a "field not found" error
def spam_checker(SharedLink)
submitters_ip = SharedLink.submitters_ip
# see if this user"s ip appears on a spam list
# if it does flag it "spam"
return flag

उत्तर:

उत्तर № 1 के लिए 1

मुझे लगता है कि आपकी त्रुटि एक परिपत्र आयात के कारण होती है - अर्थात models.py आयात spam_analyzer.py, और इसके विपरीत, इसलिए पायथन एक गड़गड़ाहट में बदल जाता है। हालाँकि आपके द्वारा पोस्ट किए गए कोड के साथ, आयात करने की कोई आवश्यकता नहीं है SharedLink में spam_analyzer, चूंकि आप इसे एक पैरामीटर के रूप में पास करते हैं (हालांकि ध्यान दें कि आप एक उदाहरण को पारित कर रहे हैं, न कि केवल कक्षा को, इसलिए आपको वास्तव में पैरामीटर को कॉल करना चाहिए shared_link स्पष्टता की खातिर)।

बनाने के लिए एक विकल्प होगा spam_checker SharedLink क्लास की एक विधि पर काम करें, ताकि आप कॉल कर सकें self.spam_checker() आपकी सेव () विधि में।


जवाब के लिए 0 № 2

इसे फॉर्म लेयर पर जांचें। जब आप पहली बार शेयरलिंक देखते हैं, तो आप अपने फॉर्म में साफ () रूटीन से स्पैम_चेकर को कॉल कर सकते हैं; फिर लिंक के साथ मॉडल के माध्यम से ध्वज को पास करें।

लेकिन संभवतः बेहतर है, यह देखते हुए कि आपका स्पैमचैकरनिरंतर सुधार के तहत है, मॉडल पर फ्लैग () विधि के रूप में स्पैमचैकर को लागू करें। इस प्रकार ध्वज हमेशा आपके सबसे हाल के स्पैम_चेकिंग एल्गोरिथ्म का उपयोग करेगा।

class SharedLink(models.Model):
link = models.URLField()

@property
def flag(self):
return spam_check(self.link)