2017-12-09 2 views
1

Ich habe ein Formular, wo gibt es ein Feld wie Menge, Rate, basic_amount (deaktiviert), Mehrwertsteuer, Other_expenses und net_amount (deaktiviert). Das Feld basic_amount ist die Berechnung aus Menge und Rate und net_amount ist die Berechnung von basic_amount, other_expenses und vat. Dazu habe ich das Signal zum Speichern in der Datenbank verwendet, wenn der Benutzer das Formular abschickt. Wenn ich das Formular abschicke, erhalte ich eine Fehlermeldung, dass basic_amount und net_amount erforderlich sind, obwohl ich ihnen das Attribut blank = True, null = True übergeben habe.deaktiviert Feld wird als erforderlich markiert nach dem Übergeben von null = True

Wie kann ich nun basic_amount und net_amount speichern?

Hier ist mein Code

class PurchaseOrder(models.Model): 
    item = models.ForeignKey(Item, blank=True, null=True) 
    quantity = models.PositiveIntegerField(default=0) 
    rate = models.DecimalField(default=0.0, max_digits=100, decimal_places=2) 
    basic_amount = models.DecimalField(default=0.0, max_digits=100, decimal_places=2, blank=True, null=True) 
    vat = models.CharField(max_length=10, blank=True, null=True) 
    other_expenses = models.DecimalField(default=0.0, max_digits=100, decimal_places=2) 
    net_amount = models.DecimalField(default=0.0, max_digits=100, decimal_places=2, blank=True, null=True) 

def save_basic_amount_and_net_amount(sender, instance, *args, **kwargs): 
    if (instance.quantity and instance.rate): 
     instance.basic_amount = instance.quantity * instance.rate 
    if (instance.basic_amount and instance.vat and instance.other_expenses): 
     instance.net_amount = instance.amount - instance.other_expenses - instance.vat 
pre_save.connect(save_basic_amount_and_net_amount, sender=PurchaseOrder) 


class PurchaseOrderForm(forms.ModelForm): 
    basic_amount = forms.DecimalField(disabled=True) 
    net_amount = forms.DecimalField(disabled=True) 
    class Meta: 
     model = PurchaseOrder 
     exclude = ('office', 'timestamp', 'updated',) 

def purchase_order(request): 
    form = PurchaseOrderForm(request.POST or None) 
    if request.method == "POST" and form.is_valid(): 
     office_instance = OfficeSetup.objects.get(owner=request.user) 
     new_form = form.save(commit=False) 
     new_form.office = office_instance 
     new_form.save() 
     messages.success(request, 'Thank you') 
     return redirect('purchase-order-lists') 
    messages.warning(request, "Correct the errors below") 
    context = { 
     "form": form, 
    } 
    return render(request, 'dashboard/purchase_order/purchase_order.html', context) 

Antwort

0

blank=True und null=True zu erzählen, was in der Datenbank zulässig ist, nicht die Form. Wenn der Wert im Formular leer sein kann, fügen Sie der Formulardefinition required=False hinzu. Zum Beispiel:

class PurchaseOrderForm(forms.ModelForm): 
    basic_amount = forms.DecimalField(disabled=True, required=False) 
    ... 
+0

Ich dachte bei der Verwendung von modelform, wenn ein Feld leer = True, null = True hat, behandelt es als nicht erforderlich. Danke für Ihre Hilfe. –

Verwandte Themen