2017-11-20 5 views
1

readonly div (읽기 전용 경우)에 숨겨진 입력을 추가하기 위해 fieldset.html 템플릿을 편집하려고합니다.Django - 읽기 전용 필드의 값을 가져옵니다 (읽기 전용 오류 수정)

{% if field.is_readonly %} 
    <div class="readonly {% if field.field.name %} field-{{ field.field.name }}{% endif %}">{{ field.contents }}</div> 
    <input id="{% if field.field.name %} id-{{ field.field.name }}{% endif %}" type="hidden" value="{{ field.field.initial }}"/> 
{% else %} 
    {{ field.field }} 
{% endif %} 

내 문제는 내가 읽기 전용 "get_readonly_fields"로 필드를 설정하면 숨겨진 필드가 필요하기 때문에, 내가이는 대신 사업부를 사용 장고의 큰 오류라고 생각합니다 (양식을 제출 할 수 없다는 것입니다 숨겨진 입력).

위의 코드로 수정하려고했지만 "field.field.initial"이 읽기 전용 필드에 비어 있기 때문에 값을 입력 할 수 없습니다. 어떻게 해결할 수 있습니까?

UPDATE

내 form.py :

class MyModelAdminForm(forms.ModelForm): 
    val1 = forms.CharField() 
    val2 = forms.ModelChoiceField(queryset=User.objects.filter(groups__name='Group1')) 
    val3 = forms.CharField(widget=forms.DateInput(attrs={'type': 'date'})) 

    class Meta: 
    model = MyModel 
    fields = ('val1', 'val2', 'val3') 

    def __init__(self, *args, **kwargs): 
    super().__init__(*args, **kwargs) 
    for field in self._meta.fields: 
     attrs = {'class':'form-control'} 
     self.fields[field].widget.attrs.update(attrs) 

내 admin.py

class CampaignAdmin(admin.ModelAdmin): 

    def get_form(self, request, obj=None, **kwargs): 
    return MyModelAdminForm 

    def get_fieldsets(self, request, obj=None): 
    return [ 
     (None,   {'fields': ['val1', 'val2']}), 
     ('Informations', {'fields': ['val3']}), 
    ] 

    def get_readonly_fields(self, request, obj=None): 
    if obj: 
     return self.readonly_fields + ('val2',) 
    else: 
     return self.readonly_fields 

내가 그 val2만큼이 편집 페이지에서 읽기 전용 모드에 필요합니다.

답변

0

일반적으로 양식에 필드를 추가 할 수 있습니다. 따라서 숨겨진 필드와 함께 읽기 전용으로 표시 할 필드가 필요한 경우 두 필드를 추가하면됩니다. 저장하려면 숨겨진 필드의 이름을 올바르게 지정해야합니다. label을 사용하여 읽기 전용 필드 (https://docs.djangoproject.com/en/1.11/ref/forms/fields/#label)의 레이블을 변경할 수 있습니다.

편집 - 당신의 코드에 대한 솔루션 :

: 대신 일반 필드의 val2 같은 읽기 전용 필드가 폼을 변경하는 경우, 당신은 또한에서 폼의 Meta.fields 설정을 변경해야 솔루션에 대한

,

fields = ('val1', 'val2', 'val3') 

fields = ('val1', 'val3') 

에 그렇지 않으면 val2에 대한 유효성 검사기가 실행됩니다.

val2의 위젯을 HiddenInput으로 변경하고 readonly_field이라는 값을 django 관리 클래스의 명시 적 메소드와 다른 이름을 사용하여 추가해야합니다. 하지만 모드 (편집 또는 생성)에 따라 필드 세트를 변경해야합니다.

+0

타이, 내 질문을 업데이트했습니다. – Mark116