8

मैं django-taggit (click here) का उपयोग करना चाहता हूं। प्रलेखन ( click here) फॉर्म उत्पन्न करने के लिए ModelForm का उपयोग करने के बारे में बात करता है लेकिन मेरे पास पहले से ही मेरा फॉर्म है जिसका मैं उपयोग करना चाहता हूं। कैसे मैं टैग tags क्षेत्र से आ रही सहेज सकताdjango - django-taggit form

forms.py

class MyForm(forms.Form): 
    ...... 
    tags = forms.CharField(max_length=200, widget=forms.Textarea) 

:

अगर मैं कुछ इस तरह है मान लें? मेरे views.py में क्या जाता है? एक असली उदाहरण वास्तव में सराहना की जाएगी।

उत्तर

12

मैं Django taggit अनुप्रयोग के साथ भी परिचित नहीं हूँ, लेकिन ऐसा लगता है जैसे आप एक ही क्षेत्र और विजेट सेटअप एप्लिकेशन का उपयोग करता उपयोग करना चाहते हैं, तो आप उन्हें taggit.forms से आयात कर सकते हैं (https://github.com/alex/django-taggit/blob/master/taggit/forms.py) दिखता है:

अपने models.py:

from django.db import models 

from taggit.managers import TaggableManager 

class Food(models.Model): 
    name = models.CharField(max_length=20) 

    tags = TaggableManager() 

अपने forms.py

from taggit.forms import * 

class MyForm(forms.Form): 
    name = forms.CharField() 
    m_tags = TagField() 

TagField होगा utils.p से parse_tags पद्धति का उपयोग करके संसाधित इनपुट वापसी टैगगिट ऐप में वाई। वापसी एक साफ सूची (सेट (शब्द))

अपने views.py होने के लिए लग रहा है

if form.is_valid(): 
    name = form.cleaned_data['name'] 
    m_tags = form.cleaned_data['m_tags'] 
    object = Food(name=name) 
    object.save() 
    for m_tag in m_tags: 
     object.tags.add(m_tag) 
    return HttpResponseRedirect('/thanks/') 
+2

यह निश्चित रूप से टैग को हटा नहीं देता है, अगर आपने उन्हें हटाने के लिए चिह्नित किया है। –

7

मैं इस्तेमाल किया/"हरी टिक" जवाब पर टिप्पणी नहीं कर सकते हैं। लेकिन मैं

object.tags.add(*m_tags) 
3

निर्देश देखें यहाँ करने के लिए ब्लॉक

for m_tag in m_tags: 
    object.tags.add(m_tag) 

बदल जाएगा: https://github.com/alex/django-taggit/blob/master/docs/forms.txt

हैं, जब एक रूप से बचते हुए, commit=False विकल्प का उपयोग आप save_m2m() कॉल करने के लिए की आवश्यकता होगी ऑब्जेक्ट को सहेजने के बाद फॉर्म पर, जैसा कि आप के लिए सामान्य पर कई फ़ील्ड के साथ फॉर्म करेंगे:

if request.method == "POST": 
    form = MyFormClass(request.POST) 
    if form.is_valid(): 
     obj = form.save(commit=False) 
     obj.user = request.user 
     obj.save() 
     # Without this next line the tags won't be saved. 
     form.save_m2m()