2016-03-08 1 views
0

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

  1. он показывает сообщение подтверждения

  2. есть авто декремент в книге номере есть, скажем, если есть 40 номеров, после одной книги они уменьшаются до 39

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

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

models.py

class Booking(models.Model): 
    Book_No = models.IntegerField(default=1) 
    Hostel = models.ForeignKey(List, null=True, blank=True) 
    Room_Number = models.ForeignKey(Room) 
    Room_capacity = models.CharField(max_length=1, choices=[('S', 'Single'), ('D', 'Double')], default="--") 
    Booked_by = models.ForeignKey(Student, default='--') 
    Booked_on = models.DateTimeField(auto_now_add=True) 

    def __str__(self): 
     return '{}, booked a {} room in {} {} at {}'.format(
      self.Booked_by, self.Room_capacity, self.Hostel, self.Room_Number, self.Booked_on) 

views.py

def book(request): 
    if request.method == "POST": 
     form = BookForm(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=True) 
      post.save() 
    else: 
     form = BookForm() 
    return render(request, 'gyobera/book_now.html', {'form': form}) 

forms.py

class BookForm(forms.ModelForm): 
    class Meta: 
     model = Booking 
     fields = ('Book_No', 'Hostel', 'Room_Number', 'Room_capacity', 'Booked_by') 

book_now.html

{% extends 'base.html' %} 

{% load staticfiles %} 

{% block title %}{{ classification_name }}{% endblock %} 

{% block body_block %} 
     <h1>Book_now</h1> <a href="/Gyobera/">Home</a><br/> 
<br/> 
    <form method="POST" class="post-form">{% csrf_token %} 
     {{ form.as_p }} 
     <button type="submit" class="save btn btn-default">Book_now</button> 
    </form> 
{% endblock %} 

благодаря

я выбрал редактировать и оставлять этот вопрос здесь, так как это больше похоже, как тот, я уже написал выше .. Я их здесь: Ниже мой взгляд тянуть номера из базы данных будут просмотр на сайте и просмотр книги. В моем приложении вы можете забронировать общежитие, но когда вы его заказываете, оно не отображается или просто остается в базе данных в виде доступной комнаты, код, который я написал, кажется совершенно неправильным и неуместным, я обращаюсь к вам за помощью .. то, что является самым простым способом, я могу фильтровать общежития, чтобы убедиться, что мужчина бродит, общежития этого пола доступны только. Надеюсь, что приведенный ниже код действительно поможет помочь. благодаря

views.py

def rooms(request): 
    context_dict = {} 
    context = RequestContext(request) 
    room_list = Room.objects.all() 
    for room in room_list: 
     context_dict = {'rooms': room_list} 
    return render_to_response('gyobera/room.html', context_dict, context) 

def book(request): 
    # check if user has already booked: 
    has_booked = Booking.objects.filter(Booked_by_id=request.POST.get('booked_by')).exists() 
    # are room free? 
    rooms_full = Booking.objects.count() == 40 
    if rooms_full or has_booked: 
     # redirect to a error view 
     return 'You have reserved yourself a room' 

    if request.method == "POST": 
     form = BookForm(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=True) 
      post.save() 
    else: 
     form = BookForm() 
    return render(request, 'gyobera/book_now.html', {'form': form}) 

models.py

class Room(models.Model): 
    Hostel = models.ForeignKey(List) 
    Room_Number = models.CharField(max_length=50) 
    Total_rooms = models.IntegerField(default=0, blank=True) 
    Price_single = models.IntegerField(default=0, blank=True) 
    Price_double = models.IntegerField(default=0, blank=True) 

    def __str__(self): 
     return ' {} | {} '.format(self.Hostel, self.Room_Number) 


class Booking(models.Model): 
    Book_No = models.IntegerField(default=1) 
    Gender = models.CharField(max_length=1, choices=[('M', 'Male'), ('F', 'Female')], default="--") 
    Hostel = models.ForeignKey(List, null=True, blank=True) 
    Room_Number = models.ForeignKey(Room) 
    Room_capacity = models.CharField(max_length=1, choices=[('S', 'Single'), ('D', 'Double')], default="--") 
    Booked_by = models.ForeignKey(Student, default='--') 
    Booked_on = models.DateTimeField(auto_now_add=True) 

    def __str__(self): 
     return '{}, {} booked a {} room in {} {} at {}'.format(
      self.Booked_by, self.Gender, self.Room_capacity, self.Hostel, self.Room_Number, self.Booked_on) 

room.html

{% extends 'base.html' %} 

{% load staticfiles %} 

{% block title %}{{ category_name }}{% endblock %} 

{% block body_block %} 
    <h1><strong>Available rooms </strong></h1><a href="/Gyobera/">Home</a><br/> 
      {% if rooms %} 
      <ul> 
       {% for room in rooms %} 
       <!-- Following line changed to add an HTML hyperlink --> 
       <li><a href="{{ room_list}}">{{ room }}</a></li> 
       {% endfor %} 
      </ul> 
     {% else %} 
      <strong>There are no rooms in this hostel.</strong> 
     {% endif %} 
{% endblock %} 
+0

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

+0

спасибо ilse2005, я полностью понял этот вид.но приложение прибегает к тому, что администратор не является основным пользователем. есть ссылка, где учащиеся могут зарегистрироваться, поэтому в представлении необходимо проверить, не забронировал ли студент уже не пользователь (потому что я предполагаю, что пользователь в этом случае является админом) продолжение: has_booked = Booking.objects.filter (reserved_by = request. student) .exists(), он вызывает объект WsgiRequest, не имеет ошибки студента-атрибута, который, как я считаю, является следствием отсутствия поиска student.so, как я могу заставить его перейти в базу данных заказов, чтобы проверить, забронировал ли ученик –

+0

В моем Код 'request.user' является зарегистрированным пользователем. Я предположил, что у студентов есть своя учетная запись и вход в систему, прежде чем заказывать номер. Если это не так, вам нужно изменить эту строку примерно так: 'Booking.objects.filter (Забронировано_и_ = request.POST.get ('booked_by')). Exists()'. – ilse2005

ответ

0

Есть много способов для достижения этой цели. Самое простое - добавить это в представление. Там вы должны проверить, если пользователь уже заказал, и если есть свободные комнаты.

def book(request): 
    # check if user has already booked: 
    has_booked = Booking.objects.filter(booked_by=request.user).exists() 
    # are room free? 
    rooms_full = Booking.objects.count() == 40 
    if rooms_full or has_booked: 
     # redirect to a error view 
     return ... 


    if request.method == "POST": 
     form = BookForm(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=True) 
      post.save() 
    else: 
     form = BookForm() 
    return render(request, 'gyobera/book_now.html', {'form': form}) 
Смежные вопросы