2012-04-18 2 views
2

Модель:Джанго - Обновление некоторых полей в ModelForm

class Session(models.Model): 
    tutor = models.ForeignKey(User) 
    start_time = models.DateTimeField() 
    end_time = models.DateTimeField() 
    status = models.CharField(max_length=1) 

Форма:

class SessionForm(forms.ModelForm): 
    class Meta: 
    model = Session 
    exclude = ['tutor'] 

Тестирование:

>>> ses = Session.objects.get(pk=1) 
>>> ses 
<Session: Robert - 2012-04-18 13:00:00> 
>>> form = SessionForm(instance=ses) 

Сейчас, например, я хотел бы обновить только status этого экземпляра и сохранить его.
Как я могу это сделать?


редактировать

Шаблон:

<form action="fhjsdhkl" method="POST">{{ csrf_token }} 
    <input name="start_time" /> 
    <input name="end_time" /> 
</form> 

выкладывает только эти 2 поля:

if request.method == 'POST': 
    form = SessionForm(request.POST) 
    if request.POST['id']: 
    try: 
     s = Session.objects.get(pk=request.POST['id']) 
     form.instance = s 
    except Session.DoesNotExist: 
     pass 
    if form.is_valid(): 
    form.save() 

сессия, которые не может быть изменен, поскольку в Ждут данные Не проверять.

Возвращение ошибки в форме

статус - Это поле обязательно

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

+1

Зачем вам нужна форма? –

+0

Я приведу пример только с одним полем, но на самом деле я делаю несколько полей из шаблона

+0

Какую ошибку проверки вы получаете? – San4ez

ответ

2

Edit 2: старый ответ не имеет никакого отношения

if request.method == 'POST': 
    form = SessionForm(request.POST) 
    if request.POST['id']: 
    try: 
     s = Session.objects.get(pk=request.POST['id']) 
     form.instance = s 
    except Session.DoesNotExist: 
     pass 
    if form.is_valid(): 
    form.save() 

Хорошо, у вас есть целый ряд вещей, здесь происходит:

1.

Эта линия должна быть такой:

form = SessionForm(request.POST, instance = s) 

2.

Вы должны переместить объект сессии вверх:

if request.method == 'POST': 
    s = get_object_or_404(Session, pk=request.POST['id']) 
    form = SessionForm(request.POST, instance = s) 

Если вы делаете попытку и, кроме метода ниже, вы поднимете ошибки проверки всякий раз, когда объект не существует. Бросьте 404 вместо. Документы находятся здесь по вышеуказанному ярлыку: https://docs.djangoproject.com/en/1.0/topics/http/shortcuts/#get-object-or-404 Вам нужно будет импортировать его, если вы еще этого не сделали.

Теперь вы можете valuidate и сохранить его:

if request.method == 'POST': 
    s = get_object_or_404(Session, pk=request.POST['id']) 
    form = SessionForm(request.POST, instance = s) 
    if form.is_valid(): 
     form.save() 

3.

Кроме того, вы не должны делать это: если request.POST [ 'ID'], как строки никогда False, то даже пустые строки.Например, попробуйте выполнить это в IDLE:

>>> '' == True 
>>> '' == False 

>>> 'a' == True 
>>> 'a' == False 

Вы заметите, что это всегда значение False.

Итак, то, что вы рассматривали, никогда не создавало эталонную модель.

+0

Я приводил пример только для одного поля, но на самом деле я делаю несколько отправленных из шаблона (я не сделал -1) –

+0

@PierredeLESPINAY У меня была небольшая ошибка, которую я исправил. Вероятно, поэтому я получил отрицание. Во всяком случае, я сделал некоторые изменения. –

+0

Я также поменял свой комментарий :) –

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