我想为客户创建发票,这些发票在大多数情况下与客户模型中的字段具有相同的值,但有时必须在发票上更改一个或多个字段。
为了更好地理解,这里是模型的简化版本:
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]
通过Customer模型中的值预先填充Invoice admin中的字段的最佳方法是什么?发票模型管理员可以使用客户ID。
答案 0 :(得分: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