首页 > 解决方案 > Django 中 /create_order/4 处的 AttributeError

问题描述

我正在制作内联表单集以在每个客户端中创建新产品,但是当我尝试保存它时会抛出这个错误

视图.py

这里我专注于创建客户订单的功能“createOrder”

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import *
from django.forms import inlineformset_factory
from .forms import OrderForm
# Create your views here.
    
def home(request):
    orders_value = Order.objects.all()
    customer_value = Customer.objects.all()
    total_orders_value = orders_value.count()
    total_customers_value = customer_value.count()
    pending_value = orders_value.filter(status='Pending').count()
    delivered_value = orders_value.filter(status='Delivered').count()
    context = {'orders_key': orders_value, 'customer_key': customer_value,
    'total_orders_key':total_orders_value, 'pending_key': pending_value, 
    'delivered_key': delivered_value}
    return render (request, 'accounts/dashboard.html', context)
    
def products(request):
    products_value = Product.objects.all()
    return render (request, 'accounts/products.html', {'products_key': products_value})
    
def customer(request, pk_test):
    customer_value = Customer.objects.get(id=pk_test)
    orders_value = customer_value.order_set.all()
    orders_value_count = orders_value.count()
    myFilter_value = OrderFilter()
    context = {'customer_key':customer_value, 
        'orders_key': orders_value, 
        'orders_key_count': orders_value_count,
        'myFilter_key':myFilter_value}
    return render (request, 'accounts/customer.html', context)
    
def createOrder(request, pk):
    OrderFormSet= inlineformset_factory(Customer, Order, fields=('product', 'status'), extra=10)
    customer = Customer.objects.get(id=pk)
    form_set_value= OrderFormSet(queryset=Order.objects.none() ,instance=customer)
    if request.method == 'POST':
        form_set_value= OrderFormSet(request.POST, instance=customer)
        if form_set_value.is_valid:
            form_set_value.save()
            return redirect('/')
    context = {'form_set_key':form_set_value}
    return render(request, 'accounts/order_form.html', context)
    
def updateOrder(request, pk):
    order = Order.objects.get(id=pk)
    form_value = OrderForm(instance=order)
    if request.method == 'POST':
        form_value = OrderForm(request.POST, instance=order)
        if form_value.is_valid:
            form_value.save()
            return redirect('/')
    context = {'form_key':form_value}
    return render(request, 'accounts/order_form.html', context)
    
def deleteOrder(request, pk):
    order = Order.objects.get(id=pk)
    if request.method == 'POST':
        order.delete()
        return redirect('/')
    context={'item':order}
    return render (request, 'accounts/delete.html', context)

表格.py


     from django.forms import ModelForm, fields
        from .models import Order
        
        class OrderForm(ModelForm):
            class Meta:
                model = Order
                fields = '__all__'

模型.py

class Customer(models.Model):
    name = models.CharField(max_length=200, null=True)
    phone = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, null=True)
    data_created = models.DateTimeField(auto_now_add=True, null=True)
        
    def __str__(self):
        return self.name

class Order(models.Model):
    STATUS = (
            ('Pending', 'Pending'),
            ('Out for delivery', 'Out for delivery'),
            ('Delivered', 'Delivered'),
            )
        
    customer = models.ForeignKey(Customer, null=True, on_delete=SET_NULL)
    product = models.ForeignKey(Product, null=True, on_delete=SET_NULL)
    status = models.CharField(max_length=200, null=True, choices=STATUS)
    data_created = models.DateTimeField(auto_now_add=True, null=True)
    
    def __str__(self):
        return self.product.name

order_form.html

{% extends 'accounts/main.html' %}
{% load static %}
{% block content %}
    
<div class="row">
    <div class="col-md-6">
        <div class="card card-body">   
            <form action="" method="POST">
                {% csrf_token %}
                {{ form_set_key.management_form }}
                {% for form in form_set_key %}
                    {{form}}
                <hr>
                {% endfor %}
                <input type="submit" name="Submit">
            </form>   
        </div>
    </div>
</div>
                
{% endblock %}

客户.html

{%  extends 'accounts/main.html' %}
    
{% block content %}
    
    <br>
    
<div class="row">
    <div class="col-md">
        <div class="card card-body">
            <h5>Customer:</h5>
            <hr>
            <a class="btn btn-outline-info  btn-sm btn-block" href="">Update Customer</a>
            <a class="btn btn-outline-info  btn-sm btn-block" href="{% url 'create_order' customer_key.id %}">Place Order</a>   
        </div>
    </div>   
    <div class="col-md">
        <div class="card card-body">
            <h5>Contact Information</h5>
            <hr>
            <p>Email: {{customer_key.email}}</p>
            <p>Phone: {{customer_key.phone}}</p>
        </div>
    </div>    
    <div class="col-md">
        <div class="card card-body">
            <h5>Total Orders</h5>
            <hr>
            <h1 style="text-align: center;padding: 10px">{{orders_key_count}}</h1>
        </div>
    </div>
</div>
    
    
<br>
<div class="row">
    <div class="col">
        <div class="card card-body">
            <form method="get">    
            <button class="btn btn-primary" type="submit">Search</button>
          </form>
        </div>
    </div>      
</div>
<br>
    
<div class="row">
    <div class="col-md">
        <div class="card card-body">
            <table class="table table-sm">
                <tr>
                    <th>Product</th>
                    <th>Category</th>
                    <th>Date Orderd</th>
                    <th>Status</th>
                    <th>Update</th>
                    <th>Remove</th>
                </tr>
    
                {% for order in orders_key %}
                <tr>
                    <td>{{order.product}}</td>
                    <td>{{order.product.category}}</td>
                    <td>{{order.data_created}}</td>
                    <td>{{order.status}}</td>
                    <td>{{order.product}}</td>
                    <td><a class="btn btn-sm btn-info" href="{% url 'update_order' order.id %}">Update</a></td>
                    <td><a class="btn btn-sm btn-danger" href="{% url 'delete_order' order.id %}">Delete</a></td>
                </tr>
                {% endfor %}
    
            </table>
        </div>
    </div>
</div>
    
{% endblock %}

追溯

     File "C:\Users\le\anaconda3\envs\myenv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
        response = get_response(request)
      File "C:\Users\le\anaconda3\envs\myenv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "C:\Users\le\Desktop\django-course\Django(02-09-21)\crm1\accounts\views.py", line 51, in createOrder
        form_set_value.save()
      File "C:\Users\le\anaconda3\envs\myenv\lib\site-packages\django\forms\models.py", line 681, in save
        return self.save_existing_objects(commit) + self.save_new_objects(commit)
      File "C:\Users\le\anaconda3\envs\myenv\lib\site-packages\django\forms\models.py", line 817, in save_new_objects
        if self.can_delete and self._should_delete_form(form):
      File "C:\Users\le\anaconda3\envs\myenv\lib\site-packages\django\forms\formsets.py", line 314, in _should_delete_form
        return form.cleaned_data.get(DELETION_FIELD_NAME, False)
    AttributeError: 'OrderForm' object has no attribute 'cleaned_data'

我想问题是创建 Order函数,但我找不到它。

标签: django

解决方案


推荐阅读