2010-07-08 2 views
1

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

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() 

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

ответ

1

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

Вариант 2: In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?

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

+0

Спасибо. Я пошел с возможностью отображения полей только для чтения из объекта и только редактируемых через форму. Я использовал поля формы, чтобы гарантировать сохранение только редактируемых полей. – FunLovinCoder

2

Вы можете переопределить метод 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) 
+0

Это выглядит очень многообещающе. Однако я просто не мог заставить его работать. Он продолжал сохранять поля, которые я помещал в исключение. – FunLovinCoder

Смежные вопросы