2012-03-07 3 views
3

Пытается внедрить кнопку «Посещение». Это просто (или так я думал). Пользователь с профилем нажимает «Посещение» и появляется галочка. Не могу заставить это работать на стороне Django/Python. т.е.: Поместите этого пользователя, который нажал «Посещать» участника (списка) в рамках мероприятия.Самый эффективный способ создания кнопки «Добавить событие» [Django/Python]?

шаблона:

{% if is_attending %} 
    <button class="btn" disabled="disabled"> 
     <i class="icon-ok-sign"></i> Attending 
    </button> 
{% else %} 
    <form class="left" method="POST" action="/profile/event/{{ event.id }}/"> 
    {% csrf_token %} 
      <input type="hidden" name="profile_id" value="user" /> 
      <button class="btn"> 
       Attending 
      </button> 
    </form> 
{% endif %} 

Модели:

class Event(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 
    owner = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL) 
    name = models.CharField(max_length=200) 
    location = models.CharField(max_length=200) 
    start_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    end_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    about = models.TextField(null=True, blank=True) 
    attendees = models.ManyToManyField(Profile, null=True, blank=True) 

Вид:

@login_required 
def attending_event(request, event_id): 
    event = get_object_or_404(Event, id=event_id) 
    if request.method == 'POST': 
     try: 
      id = request.POST.get('profile_id') 
      attendee = Profile.objects.get(id=id) 
      relationship = Event.objects.create(attendees__user=attendee) 
      is_attending = True 
     except: 
      pass 
     return HttpResponseRedirect('/profile/event/' + event_id + '/') 
    else: 
     if not Event.objects.filter(attendees__user=request.user).exists(): 
      is_attending = False 
    data = { 
     'is_attending': is_attending 
     } 
    return render_to_response('profiles/event.html', data, context_instance=RequestContext(request)) 

Может быть, есть что-то я пропускаю и не может видеть, что это я делаю неправильно. Но если кто-то может предложить некоторые идеи/советы о том, как это сделать; Я бы очень признателен.

+0

Теперь то, что вы хотите сделать? есть ли какая-нибудь ошибка? – Ahsan

+0

@ Ахсан, без ошибок, страница обновляется отлично. Он просто не переключает кнопку. У меня js jquery отлично работает, потому что работают другие кнопки одного и того же класса. Это что-то с моим кодом. – Modelesq

+0

В POST-данных нет переменной имени 'profile', почему вы ее извлекаете? – Ahsan

ответ

2

Просто дать вам намек, изменить его в соответствии с вашими потребностями

Шаблон:

{% if is_attending %} 
    <button class="btn"> # this code will executes when is_attending is True 
     <i class="icon-ok-sign"></i> Attending 
    </button> 
{% else %} 
    <form class="left" method="POST" action="/profile/event/{{ event.id }}/"> # Always user reverse urls instead of Hard coded 
    {% csrf_token %} 
      <input type="hidden" name="profile_id" value="{{profile.id}}" /> 
      <button class="btn"> 
       Attending 
      </button> 
    </form> 
{% endif %} 

Вид:

@login_required 
def event_profile(request, event_id) 
    event = get_object_or_404(Event, id=event_id) 
    if request.method == 'POST': 
     try: 
      id = request.POST.get('profile_id') 
      attendee = Profile.objects.get(id=id) 
      relationship = Event.objects.create(attendees__user=attendee, ....) # set other variable you want 
      is_attending = True 
    else: 
     # check in your event either your profile user is already attending or not? and set is_attending variable according to it 
    data = { 
      'is_attending': is_attending, 
      .... 
      } 
    return render_to_response('my_template.html', 
          data, 
          context_instance=RequestContext(request)) 
+0

Я получаю '' UnboundLocalError'-локальную переменную 'is_attending', на которую ссылаются перед присваиванием'. Поэтому я попытался помещать 'context ['is_attending'] = True' и вместо этого передал« контекст »в рендер. Больше не дал мне ошибку, передал мне правильный URL. Никакой информации не было, т.е. /; сломанные ссылки и т. д. И это не привело к изменению кнопки. Есть ли способ исправить «UnboundLocalError» без прохождения «контекста»? – Modelesq

+0

Назначьте это в 'else' части кода, прочитайте там комментарии. – Ahsan

+0

Обновлен этот пост (вид). Загружает, но не делает изменения. – Modelesq

Смежные вопросы