2013-07-29 8 views
6

मैं Edit/Update कोशिश कर रहा हूँ एक मॉडल वस्तु (रिकार्ड) Django Updateviewको छोड़कर खेतों से अद्यतन दृश्य Django के साथ मॉडल वस्तु का संपादन

model.py का उपयोग कर

from django.db import models 
from myapp.models import Author 

class Book(models.Model): 
    author = models.ForeignKey(Author) 
    book_name = models.CharField(max_length=260) 
    amount = models.DecimalField(
     max_digits=10, decimal_places=2, default=0.00) 

    description = models.TextField() 

views.py

class BookEditView(generic.UpdateView): 
    model = Book 
    template_name_suffix = '_update_form' 
    exclude = ('author',) 

    def get_success_url(self): 
     return reverse("books:list_of_books") 

books_update_from। एचटीएमएल

{% extends "base.html" %} 
{% block main_title %}Edit Book{% endblock %} 
{% block content %} 
    <form method="post" action="" class="form-horizontal"> 
    {{form.as_p}} 
    </form> 
{% endblock %} 

जब प्रपत्र प्रदान की गई है, Author विदेशी क्षेत्र अभी भी पृष्ठ पर प्रदर्शित कर रहा है, भले ही मैं ऊपर

ताकि क्षेत्र छिपाने के लिए और प्रस्तुत करने के लिए कैसे के रूप में BookEditview में exclude में यह उल्लेख किया था प्रपत्र ?

इसके अलावा मैंने form.book_name, form.amount आदि जैसे व्यक्तिगत फ़ील्ड को प्रस्तुत करके कोशिश की, (मुझे पता है कि यह दृष्टिकोण उपरोक्त मुद्दे को हल नहीं करता है बल्कि मूर्खतापूर्ण प्रयास देता है)। जब मैं फॉर्म जमा करता हूं, तो उसकी कार्रवाई लापरवाह है और कुछ भी नहीं करती है क्योंकि हम author foreign key value सबमिट नहीं कर रहे हैं और इसलिए फॉर्म अमान्य है और सबमिट कुछ भी नहीं करता

तो मैं क्या जानना चाहता हूं कि फ़ील्ड को कैसे बाहर निकालना है मॉडल जब UpdateView का उपयोग कर मॉडल को संपादित करने के लिए एक फार्म के रूप में प्रस्तुत होने से (मैं अपने कोड में कुछ ऊपर गलत किया है?)

इसके अलावा मैं चाहता हूँ Updateview की अवधारणा को पता है तो यह है कि अगर हम foreignKey क्षेत्र बाहर किए जाने वाले विदेशी कुंजी मान जमा करने की आवश्यकता है? (क्योंकि संपादन फ़ॉर्म केवल तभी मान्य होगा जब Author Foreign Key समेत प्रत्येक फ़ील्ड मान के साथ सबमिट की गई हो?)

उत्तर

6

एक bookform कि क्षेत्र शामिल नहीं परिभाषित करें,

class BookForm(forms.ModelForm): 
    class Meta: 
     model = Book 
     exclude = ('author',) 

तो आपके विचार

class BookEditView(generic.UpdateView): 
    model = Book 
    form_class = BookForm 
    ... 
+0

में इस फार्म का उपयोग: जवाब देने के लिए धन्यवाद, कश्मीर वहाँ जब हम पर क्लिक करें विदेशी कुंजी मान प्रस्तुत करने के लिए किसी भी तरह से है जमा करें ? मेरा मतलब है कि हम इस व्यवहार को form_data या कुछ तरीकों से ओवरराइड कर सकते हैं? –

+0

यदि आप लेखक को बदलना चाहते हैं तो आप 'form_valid' विधि को ओवरराइड कर सकते हैं। दस्तावेज़ों से [इस उदाहरण] (https://docs.djangoproject.com/en/1.5/topics/class-based-views/generic-editing/#models-and-request-user) देखें। अन्यथा, मुझे यकीन नहीं है कि आपका क्या मतलब है - जब आप जानबूझकर इसे फॉर्म से बाहर रखते हैं तो आप मूल्य क्यों सबमिट करना चाहते हैं? – Alasdair

+0

क्षमा करें मेरा मतलब यह है कि अगर हमने इसके लिए एक फॉर्म क्लास नहीं लिखा है। वैसे भी मुझे उपरोक्त उत्तर से समाधान मिला है, लेकिन अगर हम एक फॉर्म क्लास नहीं बनाये हैं तो आगे बढ़ना चाहते हैं? विदेशी क्षेत्र को कैसे बाहर निकालना है क्योंकि बहिष्करण अपडेटव्यू –

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