在Django ModelAdmin中相对于选定的ForeignKey获取初始数据

时间:2012-08-06 13:31:20

标签: 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 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。

1 个答案:

答案 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