如何让Django admin.TabularInline不需要一些项目

时间:2009-09-09 17:27:58

标签: python django

class LineItemInline(admin.TabularInline):
    model = LineItem
    extra = 10

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

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)

当我这样设置时,管理界面要求我将数据添加到所有十个LineItems。 LineItems有必填字段,但如果没有输入数据,我预计它不需要整行项目。

2 个答案:

答案 0 :(得分:1)

这很奇怪,它应该不会这样做 - 如果你没有输入任何东西,它不应该连续需要任何数据。

我想知道default选项是否会导致它混淆。同样,Django应该应对这一点,但尝试删除它们,看看会发生什么。

另请注意:

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

无效,因为0不能是UnitOfMeasure对象的ID。如果您不需要FK,请在字段声明中使用null=True, blank=True

答案 1 :(得分:0)

原来问题是默认值。上面提到的关于UnitOfMeasure的那个不是实际问题,但是任何具有默认值=的字段都会导致它要求其余的数据存在。这对我来说似乎是一个错误,因为在确定记录中是否有任何需要保存的内容时,应该减去默认值,但是当我删除所有默认值时,它会起作用。

在此代码中,      item_unit_of_measure = models.ForeignKey(UnitOfMeasure,默认= 0) 这是让数据库中的第0个条目成为默认值的偷偷摸摸的方式。然而,正如他所指出的那样,这并不成功。