2016-11-01 7 views
0

私はdjangoの初心者ですが、私はこのプロジェクトで問題があります。私の目標は各ユーザーに1〜10のスコアを与えることです。私の質問は、 "granted_by"を自分自身を除いて "granted_to"にスコア "nota"を与えるにはどうすればいいのですか?私はビューでそれを記述し、それをテンプレートで使用する方法を知らない。私に愚かで簡単な質問をする前に、私のコードにピークをとってください。djangoの各ユーザーにスコアを与える方法

models.py

from django.db import models 
from django.conf import settings 


VALUE = (
    (1, "Nota 1"), 
    (2, "Nota 2"), 
    (3, "Nota 3"), 
    (4, "Nota 4"), 
    (5, "Nota 5"), 
    (6, "Nota 6"), 
    (7, "Nota 7"), 
    (8, "Nota 8"), 
    (9, "Nota 9"), 
    (10, "Nota 10"), 
) 


class Score(models.Model): 
    granted_by = models.ForeignKey(settings.AUTH_USER_MODEL, default=0) 
    granted_to = models.ForeignKey(settings.AUTH_USER_MODEL, default=0, related_name="granted_to") 
    nota = models.PositiveSmallIntegerField(default=0, choices=VALUE) 

views.py

from django.http import HttpResponse, HttpResponseRedirect 
from django.contrib.auth import authenticate, login, logout 
from django.shortcuts import render 
from pro1 import settings 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth.models import User 
from .models import Punctaj 



def Login(request): 

    next = request.GET.get('next', '/home/') 
    if request.method == "POST": 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     user = authenticate(username=username, password=password) 

     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return HttpResponseRedirect(next) # render(request, "login/index.js") 
      else: 
       return HttpResponse('Inactive user.') 
     else: 
      return HttpResponseRedirect(settings.LOGIN_URL) 

    return render(request, 'login/login.html', {'redirect_to': next}) 


def Logout(request): 
    logout(request) 
    return HttpResponseRedirect(settings.LOGIN_URL) 


@login_required 
def Home(request): 
    user_list = User.objects.all() 
    context = { 

     "user_list": user_list, 
    } 
    return render(request, "login/home.html", context) 

home.html

<form class ="nota" method="POST" action="">{% csrf_token %} 
     <h3>Scores</h3> 

     <table class="table table-striped table-bordered"> 
     <thead> 
      <tr> 
      <th> User </th> 
      <th> Scor </th> 
      <th> Nota finala </th> 
      </tr> 
     </thead> 
     <tbody> 

     {% for fotbalist in user_list %} 
      <tr> 
      <td>{{ fotbalist.username }}</td> 
      <td><input type="number" name="scor" min="1" max="10"></td> 
      <td></td> 
      </tr> 
     {% endfor %} 

     </tbody> 
     </table> 
    </div> 
    </div> 
    <p><input type = "submit" value="submit"/></p> 
    </form> 
+0

Unreあなたの問題を解決するためにlatedが、私はあなたの関数の名前を小文字にするでしょう。クラスをCamelCaseにし、小文字で機能させるのが一般的な方法です。 (すなわち 'class Foo():'または 'def bar():') – jape

+0

あなたはあなたの各ユーザにお互いに正しいスコアを与える必要があると言っていますか? 10人のユーザーがいれば、10人のユーザー全員がスコアをつけます。お互いのスコアに加えて、自分自身にスコアを与えないようにする必要がありますか? –

+0

はい、まさに私が欲しいものです –

答えて

0

あなたのプロジェクトでは、このようなものを使用することができます。

Models.py

class Score(models.Model): 
    granted_by = models.ForeignKey(settings.AUTH_USER_MODEL, default=0) 
    granted_to = models.ForeignKey(settings.AUTH_USER_MODEL, default=0, related_name="granted_to") 
    nota = models.PositiveSmallIntegerField(default=0, choices=VALUE) 

View.py

class giveScoreView(FormView): 
    template_name = 'give_score.html' 
    form_class = giveScoreForm 

    def get_initial(self): 
     initial_dict = {} 
     initial_dict['user'] = self.request.user 
     return initial_dict 

    def form_valid(self, form): 
     form.instance.granted_by = self.request.user 
     form.save(commit=True) 

    def get_success_url(self): 
     url = "some return url" 
     return url 

Forms.py

class giveScoreForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     super(giveScoreForm, self).__init__(*args, **kwargs) 

     loggedin_user = kwargs.get('initial').get('user') 

     qs = settings.AUTH_USER_MODEL.objects.filter().exclude(
       username=loggedin_user.username) 

     self.fields['nota'].widget = forms.TextInput(attrs={ 
      'id': 'nota', 
      'class': 'form-control', 
      'name': 'nota', 
      'placeholder': 'Score', 
      'required': True}) 

     self.fields['granted_to'] = forms.ModelChoiceField(
      queryset=qs, 
      to_field_name='email', 
      widget=forms.Select(attrs={'class': 'form-control', 
             'required': True}) 
      ) 

    class Meta: 
     model = Score 
     fields = ['granted_to', 'nota'] 

give_score.html

<form id="lead-form" role="form" method="post" action="{% url "giveScoreView" %}"> 
    {% csrf_token %} 
    <div class="form-group"> 
     <label>nota</label> 
     {{form.nota}} 
    </div> 
    <div class="form-group"> 
     <label>granted_to</label> 
     {{form.granted_to}} 
    </div> 
    <button type="submit" class="btn btn-primary btn-lg">Add</button> 
</form> 
関連する問題