Python 在Django ModelAdmin中获取相对于所选ForeignKey的初始数据
我想为客户创建发票,在大多数情况下,这些发票与客户模型中的字段具有相同的值,但有时必须更改发票上的一个或多个字段 为了更好地理解,这里是模型的简化版本:Python 在Django ModelAdmin中获取相对于所选ForeignKey的初始数据,python,django,django-admin,Python,Django,Django Admin,我想为客户创建发票,在大多数情况下,这些发票与客户模型中的字段具有相同的值,但有时必须更改发票上的一个或多个字段 为了更好地理解,这里是模型的简化版本: class Customer(models.Model): name = models.CharField(max_length=50) surname = models.CharField(max_length=50) email = models.Charfield(max_length=50) class Inv
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。要能够预填充管理员视图,您需要修改管理员表单,如下所示:
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
为了能够预填充管理员视图,您需要修改管理员表单,如下所示:
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
谢谢,我是通过
kwargs['initial']['customer']
获得客户ID的。谢谢,我是通过kwargs['initial']['customer']获得客户ID的。