2015-02-24 2 views
0

У меня есть таблица, где я сохраняю данные (описание, x, y, результат и дату создания), и до сих пор все работает. Я подумал, что затем добавить столбец с автором для каждой сохраненной строки, например:author = models.ForeignKey ('auth.User', null = True, blank = False) problem

DES | X | Y | РЕЗУЛЬТАТ | ДАТА СОЗДАНИЯ | АВТОР |

hi | 3| 1 | 4 | 24/02/2015  | username | 

Затем я добавил в models.py идентификации:

from django.db import models 
from django.utils import timezone 
from simpleapp.oper import add_divide 
from django.conf import settings 


class ElementiTab(models.Model): 
    author = models.ForeignKey('auth.User', null=True, blank=False) 
    des = models.CharField(max_length=30) 
    x = models.FloatField() 
    y = models.FloatField() 
    res = models.FloatField(default=0) 
    created_date = models.DateTimeField(default=timezone.now) 

    def save(self, *args, **kwargs): 
     self.res = add_divide(self.x, self.y) 
     super(ElementiTab, self).save(*args, **kwargs) 


    def __str__(self): 
     return self.des 

ОБНОВЛЕНИЕ:

forms.py

from django import forms 
from .models import ElementiTab 

class ElementiTabForm(forms.ModelForm): 

    class Meta: 
     model = ElementiTab 
     fields = ('des', 'x', 'y') 

views.py

@login_required 
def tabval(request): 
    # if this is a POST request we need to process the form data 
    valori = ElementiTab.objects.filter().order_by('-created_date') 
    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form = ElementiTabForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      # process the data in form.cleaned_data as required 
      form.save() 

    # if a GET (or any other method) we'll create a blank form 
    else: 
     form = ElementiTabForm() 

    return render(request, 'simpleapp/simpleapp.html', {'form': form, 'valori': valori}) 

@user_passes_test(lambda u: u.is_superuser) 
def delete(request, id): 
    valori_to_delete = get_object_or_404(ElementiTab, pk=id).delete() 
    return redirect(tabval) 

simpleapp.html

{% extends 'registration/base_reg.html' %} 
    {% block title %}SimpleApp-tabval{% endblock %} 
    {%block content%}  



      <h4>TABELLA CON DATI</h4> 






<form action="/simpleapp/" method="post"> 
    {% csrf_token %} 
    {{ form.as_table }} 
    <input type="submit" value="LIST" /> 
    </form> 
<form action="/simpleapp/" method="DELETE"> 
     {% csrf_token %} 
     <input type="submit" name="canc" value="RESET" /> 
</form> 

    <br /> 
    <br />   

        <div class="table-responsive"> 
         <table class="table table-bordered"> 
          <tr class="info"> 
          <td width="15%" align="center"> NOME</td> 
          <td width="15%" align="center"> X </td> 
          <td width="15%" align="center"> Y </td> 
          <td width="15%" align="center"> RISULTATO </td> 
          <td width="15%" align="center"> DATA CREAZIONE </td> 
          <td width="15%" align="center"> AUTORE </td> 
          {% for elementi in valori %} 
           <div class="elementi"> 
            <tr> 

            <td>{{elementi.des}}</td> 
            <td>{{elementi.x}}</td> 
            <td>{{elementi.y}}</td> 
            <td>{{elementi.res}}</td> 
            <td>{{elementi.created_date}}</td> 
            <td>{{elementi.author}}</td> 
            <td width="1%"> 
            {% if user.is_superuser %} 
             <a href="/delete/{{elementi.id}}" class="btn btn-danger" role="button">Delete</a> 
            {% else %} 
            <a href="" class="btn btn-danger disabled" role="button"><span style='font-size: small'>Only Admin</span></a> 
            {% endif %} 
            </td> 
           </div> 

          {% endfor %} 
         </table> 
        </div> 



{% endblock content %} 

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

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

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

ответ

1

Я обновил свой ответ, я неправильно понял ваш вопрос.

Изменить это на ваш взгляд

if form.is_valid(): 
     # Creating the object without commiting to database 
     obj = form.save(commit=False) 
     # Setting the user from request 
     obj.author = request.user 
     # Commiting to the database 
     obj.save() 
+0

Я обновил свой вопрос с моим кодом ... Я думаю, что я сделал, как было предложено в Джанго документов, но я не уверен, что это то же самое, что вы думать о. – Trix

+0

Спасибо, теперь это работает! Не могли бы вы объяснить, зачем вам делать эти дополнительные шаги? – Trix

+1

У вас нет текущего зарегистрированного пользователя в форме, сначала мы создаем объект из формы, затем мы устанавливаем пользователя, finnaly мы передаем его базе данных. –