2011-05-11 57 views
2

我想要一個內聯表單只顯示其字段內容,並且不讓用戶編輯或刪除條目,只添加它們。這意味着在使用readonly_fields選項時,這些值將類似,並且底部的「添加另一個...」鏈接會使表單顯示,讓用戶添加更多條目。Django:自定義「只添加」內聯

can_delete選項在這裏很有用,但readonly_fields鎖定添加和更改可能性。我想象建立一個新的內聯模板可以。在這種情況下,我將如何顯示每個條目的字段值,然後在底部放置一個表單?

編輯:什麼我到現在爲止:

# models.py 
class AbstractModel(models.Model): 
    user = models.ForeignKey(User, editable = False) 
    ... some more fields ... 
    class Meta: 
     abstract = True 

class ParentModel(AbstractModel): 
    ... fields ... 
class ChildModel(AbstractModel): 
    parent = models.ForeignKey(ParentModel, ... options ...) 
    ... fields ... 

# admin.py 
class ChildModelInline(admin.TabularInline): 
    model = ChildModel 
    form = ChildModelForm 
    can_delete = False 

class ParentModelAdmin(admin.ModelAdmin): 
    ... options ... 
    inlines = (ChildModelInline,) 

# forms.py 
class ChildModelForm(models.ModelForm): 
    user = forms.CharField(required = False) 
    ... some more fields and stuff needed ... 

    def __init__(self, *args, **kwargs): 
     super(ChildModelForm, self).__init__(*args, **kwargs) 
     try: user = User.objects.get(id = self.instance.user_id) 
     except: return None 
     self.fields['user'].initial = user.first_name 
     self.fields['user'].widget.attrs['readonly'] = 'readonly' 

在這個例子中,我喜歡做我想要的user場爲只讀。

在最後一行中,如果我將widget屬性更改爲['disabled'] = True,它工作正常,但我需要一個文本項,而不是禁用的表單域。我也知道,我需要重寫save_model()save_formsets(),以使其正常工作。

回答