2009-09-09 67 views
0
class LineItemInline(admin.TabularInline): 
    model = LineItem 
    extra = 10 

class InvoiceAdmin(admin.ModelAdmin): 
    model = Invoice 
    inlines = (LineItemInline,) 

如何獲得的Django admin.TabularInline不要求一些項目

class LineItem(models.Model): 
    invoice = models.ForeignKey(Invoice) 
    item_product_code = models.CharField(max_length=32) 
    item_description = models.CharField(max_length=64) 
    item_commodity_code = models.ForeignKey(CommodityCode) 
    item_unit_cost = models.IntegerField() 
    item_unit_of_measure = models.ForeignKey(UnitOfMeasure, default=0) 
    item_quantity = models.IntegerField() 
    item_total_cost = models.IntegerField() 
    item_vat_amount = models.IntegerField(default=0) 
    item_vat_rate = models.IntegerField(default=0) 

當我有它設置這樣的管理界面是要求我將數據添加到所有十個了LineItem。 LineItems具有必填字段,但如果沒有輸入數據,我預計它不需要整行項目。

回答

1

這很奇怪,它不應該這樣做 - 如果您還沒有輸入任何內容,它不應該需要連續的數據。

我不知道default選項是否導致它感到困惑。再一次,Django應該處理這個問題,但是嘗試刪除這些並且看看會發生什麼。

還要注意的是這樣的:

item_unit_of_measure = models.ForeignKey(UnitOfMeasure, default=0) 

是無效的,因爲0不能是UnitOfMeasure對象的ID。如果您不想要FK,請在字段聲明中使用null=True, blank=True

0

原來的問題是默認值。上面關於UnitOfMeasure指出的並不是實際的問題,任何具有default =的字段都會導致需要其餘數據存在。這對我來說似乎是一個錯誤,因爲在確定記錄中是否有需要保存的任何內容時,應該減去默認值,但是當我刪除所有缺省值時,它將起作用。

在此代碼, item_unit_of_measure = models.ForeignKey(UnitOfMeasure,缺省值= 0) 它是讓在數據庫中的第0個條目是默認值的偷偷摸摸。正如他指出的那樣,這不起作用。

+0

奇數。你使用的是舊版本的Django嗎?這個錯誤在一年前已經修復(http://code.djangoproject.com/ticket/7975),並且測試包含在修復中,所以如果它迴歸,我會感到驚訝。 – 2009-09-10 00:32:52