2012-08-06 111 views
1

我想创建一个将在大多数情况下都在客户模型的字段的值相同客户的发票,但有时一个或多个字段对发票改变。相对获取初始数据选择ForeignKey的在Django的ModelAdmin

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

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中的字段?发票模型admin具有可用的客户ID。

回答

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 
+0

谢谢,我用'kwargs得到了客户ID [“初步”] [“客户”]' – 2012-08-12 15:02:02