मैं मॉडलफॉर्म के साथ एक सरल सीआरयूडी बनाने की कोशिश कर रहा हूं। यह ठीक काम करता है सिवाय इसके कि हर बार जब मैं संपादित करता हूं, तो बचत डेटा का एक नया उदाहरण बनाता है। तो मैं एक अद्यतन के बजाय डीबी में एक अतिरिक्त पंक्ति संपादित और प्राप्त करता हूं। मुझे एक नुकसान है कि मौजूदा चैरिटी को बचाने के लिए यह कैसे जानता है क्योंकि यह पीके (आईडी) को फॉर्म में एक छिपे हुए फ़ील्ड के रूप में स्टोर नहीं करता है। 'शानदार' मॉडलफॉर्म का उपयोग करने की कोशिश करने से पहले मैंने हमेशा ऐसा किया!Django ModelForm
यह मुझे पागल कर रहा है, मैंने सब कुछ पढ़ा है और जहां तक मैं कह सकता हूं कि मैं सब ठीक कर रहा हूं।
यहाँ मेरी कोड है ..
मॉडल:
from django.db import models
from django.conf import settings
COUNTRY_CHOICES = settings.COUNTRIES
class Charities(models.Model):
charity_name = models.CharField(max_length=100)
country = models.CharField(max_length=4, choices=COUNTRY_CHOICES)
registration_number = models.CharField(max_length=100)
address1 = models.CharField(max_length=100)
address2 = models.CharField(max_length=100)
city = models.CharField(max_length=30)
zip = models.CharField(max_length=10)
phone = models.CharField(max_length=20)
email = models.EmailField()
charity_logo_image = models.CharField(max_length=100)
charity_banner_image = models.CharField(max_length=100)
charity_accepted = models.IntegerField()
def __str__(self):
return self.charity_name
def __unicode__(self):
self.charity_name
दृश्य:
def list(request):
charities = Charities.objects.all()
return render_to_response('charities_charity_list.html', {'charities': charities})
def add(request):
return add_or_edit(request)
def edit(request, charity_id):
return add_or_edit(request, charity_id)
def add_or_edit(request, charity_id=None):
print "ID = " + str(charity_id)
form = CharityForm(request.POST or None,
instance=charity_id and Charities.objects.get(pk=charity_id))
# Save new/edited student
if request.method == 'POST' and form.is_valid():
print form
form.save()
return HttpResponseRedirect('/charities/list/')
return render_to_response('charities_charity_edit.html', {'form': form})
प्रपत्र:
class CharityForm(ModelForm):
class Meta:
model = Charities
टेम्पलेट:
{% extends "base.html" %}
{% block title %}Charities Add{% endblock %}
{% block content %}
<form method="post" action="/charities/add/" id="save"><table cellpadding="0">{{ form.as_table}}</table><input type="submit" value="Save"></form>
{% endblock %}
हाय टियागो, उत्तर देने के लिए धन्यवाद। मैंने जेनेरिक_अपडेट/पहले विचारों के बारे में नहीं सुना था। मैं उन पर पढ़ूंगा। बस मौजूदा विधि को काम करने की कोशिश कर रहा है, मैं charity.id से आईडी निकालने के लिए प्रतीत नहीं कर सकता, ताकि इसे संपादन यूआरएल में जोड़ सकूं। मैंने form.id भी कोशिश की लेकिन यह संदर्भ में नहीं है। इसके अलावा, charities_app क्या है? क्या आप बस मेरे लिए जगह बदलने के लिए प्लेसहोल्डर डाल रहे हैं? मेरे सदस्य के दृश्य में मैंने {% url race.members.views.edit member.id%} का उपयोग करने का प्रयास किया लेकिन त्रुटि मिली ............... rendering के दौरान ViewDoesNotExist पकड़ा: मॉड्यूल दौड़ में घर का प्रयास किया .charities.views। – Rich
मैं बेवकूफ भूल गया कि मैं संदर्भ के माध्यम से सदस्य/चैरिटी आईडी पास कर सकता हूं। तो अब मेरे पास संपादन यूआरएल में आईडी है और यह निश्चित रूप से काम करता है। धन्यवाद। अब मैं सिर्फ यह समझने की कोशिश कर रहा हूं कि आपके यूआरएल {% url charities_app.views.edit charity.id%} के समान कार्रवाई यूआरएल को कैसे बदला जाए। Charities_app क्या है। क्या यह दृष्टिकोण का मार्ग होना चाहिए? क्या मुझे get_absolute_url परिभाषित करने की आवश्यकता है? – Rich
हाय, इस मामले में charities_app उस ऐप का नाम होगा जिसमें चैरिटीज़ मॉडल शामिल है। charities_app.view.edit सिर्फ उस दृश्य का नाम है जो अनुरोध को संसाधित करने जा रहा है। यह यूआरएल टैग उपयोगी है क्योंकि आपको अपने टेम्पलेट्स में यूआरएल को कड़ी मेहनत करने की ज़रूरत नहीं है .. इस तरह, अगर आप urls.py में यूआरएल मैपिंग्स को बदलना चुनते हैं, तो आपको टेम्पलेट्स को अपडेट करने की आवश्यकता नहीं है :) –