Django: Могу ли я ограничить, какие поля сохраняются обратно в базу данных, используя формы? - PullRequest
1 голос
/ 08 июля 2010

У меня есть форма, которую я использую для отображения нескольких полей из записи для пользователя.Однако пользователь не должен иметь возможность обновлять все отображаемые поля.Как мне обеспечить это?Было бы хорошо, если бы я мог указать, какие поля сохранять при вызове form.save, но я не смог заставить это работать.Вот часть кода:

obj = get_object_or_404(Record, pk=record_id)
if request.method == 'POST':
    form = forms.RecordForm(request.POST, instance=obj)
    if form.is_valid():
        form.save()

Я не думаю, что использование exclude или полей в мета-определении формы будет работать, поскольку это будет отображать только те поля, которые пользователь может обновлять.

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

Вы можете переопределить метод save() формы:

class MyModelForm(forms.ModelForm):
    def save(self, commit=True):
        if self.instance.pk is None:
            fail_message = 'created'
        else:
            fail_message = 'changed'
        exclude = ['field_a', 'field_b'] #fields to exclude from saving
        return save_instance(self, self.instance, self._meta.fields,
                             fail_message, commit, construct=False,
                             exclude=exclude)
1 голос
/ 08 июля 2010

Вариант 1: исключите эти поля и используйте свой шаблон для отображения данных, которые не следует полностью изменять за пределами самой формы. Мне кажется, что они на самом деле не являются частью формы, если пользователь не может их изменить.

Вариант 2: В форме Django как сделать поле доступным только для чтения (или отключенным), чтобы его нельзя было редактировать?

примите этот ответ, чтобы пометить свои поля как доступные только для чтения ... но при этом вы понимаете, что здесь нет защиты на стороне сервера, поэтому вы захотите сделать что-то вроде получения целевой модели перед ее обновлением и обновления этих полей формы с ошибками до существующие данные, прежде чем сохранить форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...