2016-11-02 19 views
0

私はDjangoを初めて使っています。これまでのところ基本的なことが分かっていますが、私が学んだチュートリアルが私に教えてくれなかったことをやろうとしています。基本的に私がしたいことは、私はdelegates_numと呼ばれるフィールドを自分のmodels.pyに持っており、そのフィールドは特定のコースにサインアップするデリゲートの数のカウンターです。特定のコースにサインアップするたびにそのフィールドを1ずつ増やすことができます。コースは[ITIL, Change Management, Management of Risk, Programme Management, PRINCE2]models.pyの値をインクリメントして、ウェブサイトはそれに応じて動作します

です。たとえば、ユーザーがITILコースを予約すると、そのコースのカウンターは1.各コースはそうのようなものを言うどこかの条件を15のスペースの制限があります:

if course.name = 'ITIL' && if delegates_num > 15 
    redirect user to 'course is full page' 
else submit registration form and increment delegates_num by 1 

私は任意の助けのために非常に感謝される、ここでのコードは、これまでのところです:

class Course(models.Model): 
    MY_CHOICES = (
     ('Open', 'Open'), 
     ('Closed', 'Closed'), 
     ('Fully Booked', 'Fully Booked'), 
    ) 
    course_name = models.CharField(max_length=40) 
    course_code = models.CharField(max_length=40) 
    price = models.CharField(max_length=40, default='add price') 
    topic_details = models.TextField(max_length=200) 
    start_date = models.DateField('start date') 
    end_date = models.DateField('end date') 
    status = models.CharField(max_length=20, choices=MY_CHOICES) 
    venue = models.ForeignKey(Venue, on_delete=models.CASCADE) 
    room = models.CharField(max_length=20) 
    delegates_num=models.IntegerField() 
    def add_delegate(self): 
     #for count, thing in enumerate(args): 
     self.delegates_num+=1 
    def __str__(self): 
     return self.course_name 

モデル。 py

<h1>Registration</h1> 
    <form method="POST" class="post-form">{% csrf_token %} 
     {{ form.as_p }} 

     {% if course.course_name = 'ITIL' %} 
      {{ course.delegates_num|inc }} 
      {% if course.delegates_num > 15 %} 
       <meta http-equiv="refresh" content="1;url=http://example.com"> 
        <script type="text/javascript"> 
         window.location.href = "https://yr4-group-project-mfblack.c9users.io/sorry_full/" 
       </script> 
       {% endif %} 
     {% endif %} 
     <button type="submit" class="save btn btn-default">Save</button> 
    </form> 

book_course.html

def book_course(request): 
    if request.method == "POST": 
     form = StudentForm(request.POST) 
     if form.is_valid(): 
      student = form.save(commit=False) 
      student.save() 
      student.course.add_delegate() 
      return redirect('registration_complete') 
    else: 
     form = StudentForm() 
    return render(request, 'website/book_course.html', {'form': form}) 

views.py

答えて

0

私はあなたがコースを残して、アカウントの人々に取っていない推測しているので、それは、単に財産を作るために、おそらくはるかに簡単です - ユーザーエラーの可能性があります。

カウントは通常、小さなデータベース操作で取得し、私はあなたがユーザモデルやsimlarへのFKを持っていると仮定し

@property 
def delegates_num(self) 
    return self.user_set.count() 

正確であることが、いくつかのguarranteeを持つプロパティ...

+0

ことでそれを私のmodels.pyに追加すると、ユーザーがコースを予約するたびに自動的にこのフィールドが増えます。 – Huzzah

+0

@HassnIrshaad - いいえ、これでフィールドの必要はなくなりましたが、あなたは '{{course.delegates_num}}'のテンプレートで同じ方法で値にアクセスすることができます – Sayse

+0

これをどのように増やしますか私のコードで1の値ですか?同じ方法? – Huzzah

関連する問題