1

我想为在大多数情况下与客户模型中的字段具有相同值的客户创建发票,但有时必须在发票上更改一个或多个字段。

为了更好地理解这里是模型的简化版本:

class Customer(models.Model):
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    email = models.Charfield(max_length=50)

class Invoice(models.Model):
    customer = models.ForeignKey(Customer)
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    email = models.Charfield(max_length=50)

我在客户管理页面上有一个特殊按钮,可将用户重定向到/admin/sell/invoice/add/?customer=[customer.id]

通过客户模型中的值预先填充发票管理中的字段的最佳方法是什么?发票模型管理员有可用的客户 ID。

4

1 回答 1

1

为了能够预填充您的管理视图,您需要像这样修改管理表单:

class InvoiceForm(forms.ModelForm):
    class Meta:
        model = Invoice

    def __init__(self, *args, **kwargs):
        super(InvoiceForm, self).__init__(*args, **kwargs)
        # get the customer ID somehow
        my_customer = Customer.objects.get(id=CUSTOMER_ID)
        self.initial['name'] =  my_customer.name
        self.initial['surname'] = my_customer.surname
        self.initial['email'] = my_customer.email


class InvoiceAdmin(admin.ModelAdmin):
    form = InvoiceForm
于 2012-08-08T20:38:46.437 回答