【问题标题】:Django: Custom "add only" inlineDjango:自定义“仅添加”内联
【发布时间】:2011-05-11 01:31:17
【问题描述】:

我希望内联表单仅显示其字段内容,并且不允许用户编辑或删除条目,仅添加它们。这意味着当使用readonly_fields 选项时值会相似,并且底部的“添加另一个...”链接会出现一个表单,让用户添加更多条目。

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 字段为只读。

在最后一行,如果我将小部件属性更改为['disabled'] = True,它可以正常工作,但我需要一个文本条目,而不是禁用的表单字段。我也知道我需要覆盖 save_model()save_formsets() 才能正常工作。

【问题讨论】:

    标签: django django-admin django-forms


    【解决方案1】:

    我会使用extra=1 来获取最后一个工作表单。

    然后遍历除视图中最后一个以外的所有表单,并像这样更改每个字段:In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?

    您不必在__init__ 中执行此操作,当然您可以在创建整个表单集后访问这些属性。

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 2012-06-13
      • 1970-01-01
      • 2018-02-22
      • 2018-10-11
      • 2011-12-29
      • 1970-01-01
      • 2012-03-08
      • 2011-01-11
      相关资源
      最近更新 更多