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的。