6

मेरे पास दो मॉडल हैं और दोनों में फ़ील्ड 'स्टेटस' है जिसका उनके लिए अलग अर्थ है।django दो मॉडलफॉर्म एक ही टेम्पलेट पर एक ही फ़ील्ड नाम के साथ

class Order(models.Model): 
    ... 
    status = models.PositiveIntegerField(default=0, choices=ORDER_STATUSES) 
    ... 

class ACS(models.Model): 
    status = models.IntegerField(default=-1, choices=STATUSES) 
    order = models.ForeignKey(Order, blank=True, null=True) 
    ... 

उनके रूपों लगता है:

class ACSForm(forms.ModelForm): 
    status = forms.ChoiceField(
     choices=STATUSES, 
     widget=forms.Select(attrs={'class': 'form-control'}) 
    ) 
    ... 

    class Meta: 
     model = ACS 
     fields = ('status',) 

class OrderACSEditForm(forms.ModelForm): 
    status = forms.ChoiceField(
     choices=ORDER_STATUSES, 
     widget=forms.Select(attrs={'class': 'form-control'}) 
    ) 

    class Meta: 
     model = Order 
     fields = ('status',) 

मैं एक ही पृष्ठ पर दोनों इस फ़ील्ड को संपादित करना चाहते हैं। मेरे view.py तरह

def edit(request, item_id=""): 
    data = ACS.objects.get(pk=item_id) 
    form = ACSForm(instance=data) 
    order = Order.objects.get(id=data.order.id) 
    form_edit = OrderACSEditForm(instance=order) 
    if request.POST: 
     form = ACSForm(request.POST, instance=data) 
     form_edit = OrderACSEditForm(request.POST) 
     if form.is_valid() and form_edit.is_valid(): 
      form_edit.save() 
      obj = form.save() 
      messages.add_message(request, messages.SUCCESS, 'Your data successfully saved.') 

     if request.POST['action'] == "save_stay": 
      return redirect("/panel/packages/acs/edit/" + str(obj.id)) 
     else: 
      return redirect("/panel/packages/acs/") 
    return render(request, 'ui/packages/acs/edit.html', dict(data=data, form=form, form_edit=form_edit, item_id=item_id)) 

और टेम्पलेट दिखता है:

<div class="form-group {% if form.status.errors %}has-error{% endif %}"> 
    <label>{% trans "Status" %}</label> 
     {% if form.status.errors %} 
      {% for error in form.status.errors %} 
       <label class="control-label">{{ error }}</label> 
      {% endfor %} 
     {% endif %} 
     {{ form.status }} 
</div> 

<div class="form-group {% if form_edit.status.errors %}has-error{% endif %}"> 
    <label>{% trans "Order status" %}</label> 
     {% if form_edit.status.errors %} 
      {% for error in form_edit.status.errors %} 
       <label class="control-label">{{ error }}</label> 
      {% endfor %} 
     {% endif %} 
     {{ form_edit.status }} 
</div> 

लेकिन परिणाम में form.status form_edit.status जो सही नहीं है से मान हो जाता है। मुझे मॉडल फ़ील्ड के नाम बदलने के बिना इस समस्या को हल करने की जरूरत है लेकिन यह नहीं पता कि कैसे।

उत्तर

6

फ़ील्ड नामों का नाम देने के लिए prefix तर्कों का उपयोग करें।

form = ACSForm(prefix='acs', instance=data) 
form_edit = OrderACSEditForm(prefix='edit', instance=order) 

जब आप के रूप में अच्छी पोस्ट डेटा के साथ प्रपत्र का दृष्टांत ही उपसर्ग का उपयोग करना न भूलें।

+0

बहुत बहुत धन्यवाद, यह काम करता है –

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