Jak zapisać jeszcze jedno pole w bazie danych?

Odpowiedz Nowy wątek
2015-01-25 16:09
0

Próbuje dodać sobie nowe pole do mojego modelu, ale jego wartość nie zapisuje się w bazie danych.
Plik modelu:


class Todo(models.Model):
    todo_job= models.TextField()
    user=models.ForeignKey('User')
    created_date=models.DateTimeField(editable=False,default=datetime.now())
    todo_done = models.CharField(max_length=3)

Funkcja odpowiedzialna za dodawanie zadania:


def add_todo(request):
    if request.method=='POST':
        todo_obj=Todo(todo_job=request.POST.get('job'),user_id=request.session['user_id'])
        todo_obj1=Todo(todo_done=request.POST.get('done'),user_id=request.session['user_id'])
        todo_obj.save()
        todo_obj1.save()
        return HttpResponseRedirect('/')
    else:
        data=RequestContext(request,{'fname':request.session['fname']})
        return render_to_response('add_todo.html',data)

Widok:

{%extends "base.html"%}
{%block title %}Add | {{fname}}{% endblock %}
{%block content%}
<div class="mid">
<div><b>{{fname}}</b>&nbsp;|&nbsp;<a href="/logout">Logout</a></div>
<h1>Add Todo List</h1>
<form action="add-todo" method="post">
<label>Job</label>
<textarea name="job" required></textarea>
<label>Done</label>
<textarea name="done" required></textarea>
<input type="submit" value="Add">
{%csrf_token%}
</form>
</div>
{% endblock %}

Pozostało 580 znaków

2015-01-25 19:01
0

Dodajesz nowe pole do modelu, czyli które? Chodzi ci o to, że ta zmiana nie istnieje w strukturze bazy? Po każdej takiej zmianie musisz zrobić migracje bazy.

Pozostało 580 znaków

2015-01-25 19:38
0

@Wizzie o migracji wiem, pole w bazie danych jest stworzone, sprawdzałem. Widoku mam pole, które przechowuje treść zadania i pole które będzie przechowywać czy zadanie zostało wykonane: czyli tekst tak/nie. Problem jest w tym, że zapisuję się sama treść zadania, a słowa tak/nie nie zapisuje się w bazie.

Pozostało 580 znaków

2015-01-25 19:55
0

Czegoś tu nie czaję, tworzysz osobny obiekt z nazwą zadania i osobny obiekt z informacją, czy jest wykonane czy nie, chociaż używasz do tego jednego modelu?

Pozostało 580 znaków

2015-01-25 20:03
0

W tabeli jest id, todo_job, to_done. I to samo jest w jednym modelu. Tylko teraz nie wiem jak tutaj to prawidłowo napisać, żeby działało:


        todo_obj=Todo(todo_job=request.POST.get('job'),user_id=request.session['user_id'])
        todo_obj1=Todo(todo_done=request.POST.get('done'),user_id=request.session['user_id'])
        todo_obj.save()
        todo_obj1.save()

Chyba powinno być w jednym obiekcie, tylko jakoś kombinowałem.
W sql by to wyglądało tak:


INSERT INTO Moja_Tabela
VALUES (todo_job, todo_done);

Pozostało 580 znaków

2015-01-25 20:42

Masz wyraźnie dwie instancje klasy, todo_obj i todo_obj1. Spróbuj tak:

todo_obj = Todo(user_id=request.session['user_id'], todo_job=request.POST.get('job'), todo_done=request.POST.get('done'))
todo_obj.save()

Tak na marginesie - zamiast nazywać pole todo_job, ja bym je nazwał po prostu job, jak tworzysz obiekt Todo, to wiadomo, że te pola należą do niego.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0