CCCPaste

Read-only fields

Read-Only 1 way

class ReadOnlyAlbumForm(ModelForm):
    class Meta:
        model = Album
        fields = ('name', 'artist_name', 'genre', 'description', 'image_url', 'price')
        widgets = {
            'name': TextInput(attrs={'readonly': 'readonly'}),
            'artist_name': TextInput(attrs={'readonly': 'readonly'}),
            'genre': TextInput(attrs={'readonly': 'readonly'}),
            'description': Textarea(attrs={'readonly': 'readonly'}),
            'image_url': TextInput(attrs={'readonly': 'readonly'}),
            'price': NumberInput(attrs={'readonly': 'readonly'}),
        }

class DeleteAlbumView(views.DeleteView):
    queryset = Album.objects.all()
    template_name = 'albums/album-delete.html'
    success_url = reverse_lazy('index')
    form_class = ReadOnlyAlbumForm


    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs["instance"] = self.object
        return kwargs

Read-only 2 way

class ReadonlyViewMixin:
    def get_form(self, form_class=None):
        form = super().get_form(form_class=form_class)

        for field in form.fields.values():
            field.widget.attrs["readonly"] = "readonly"

        return form

class DeleteAlbumView(ReadonlyViewMixin, views.DeleteView):
    queryset = Album.objects.all()
    template_name = "albums/album-delete.html"
    success_url = reverse_lazy("index")
    form_class = modelform_factory(
        Album,
        fields=("name", "artist_name", "genre", "description", "image_url", "price"),
    )

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs["instance"] = self.object
        return kwargs