2015-09-03 2 views
0

Я пытаюсь создать приложение, где я могу сохранить временные метки для пользователей. Теперь моя форма работает прямо сейчас, но мне нужно убедиться, что mpr_id существует в таблице Player перед form.save() Как я могу сделать это приложение?Django получить значение от db до формы.save()

Если mpr_id не существует в игрока показывают ошибки в форме

это мой forms.py:

from django import forms 
from .models import PlayerRecordTime 

class AddTimeForm(forms.ModelForm): 
    class Meta: 
     model = PlayerRecordTime 
     fields = ['mpr_id'] 

models.py:

class Player(models.Model): 
    mpr_id = models.CharField(verbose_name="MPR ID", max_length=3,  editable=True, unique=True) 
    full_name = models.CharField(verbose_name="Nombre Completo", max_length=200, editable=True) 
    phone = models.CharField(verbose_name="Telefono", max_length=10, editable=True) 
    email = models.EmailField(verbose_name="Email", editable=True) 

class Meta: 
    verbose_name = "Jugador" 
    verbose_name_plural = "Jugadores" 
    ordering = ['mpr_id'] 

def __unicode__(self): 
    return self.mpr_id 


class CheckPoint(models.Model): 
id = models.IntegerField(verbose_name="ID", unique=True, editable=False, primary_key=True) 
place_name = models.CharField(verbose_name="Nombre Lugar", max_length=60, editable=True, default=True, unique=True) 

class Meta: 
    verbose_name = "CheckPoint" 
    verbose_name_plural = "CheckPoints" 

def __unicode__(self): 
    return self.place_name 


class PlayerRecordTime(models.Model): 
mpr_id = models.CharField(verbose_name="MPRID", max_length="3", editable=True) 
place_name_id = models.CharField(verbose_name="Check Point ID", max_length=1) 
check_in_time = models.TimeField(verbose_name="CheckIn Time", auto_now=True) 

class Meta: 
    verbose_name = "Tiempo" 
    verbose_name_plural = "Tiempos" 
    unique_together = ('mpr_id', 'place_name_id') 

def __unicode__(self): 
    return self.mpr_id 

views.py

def cp(request, cpid, template_name): 
title = "ScavengerRun - CP%s" % cpid 
head = "Check Point %s" % cpid 

form = AddTimeForm() 

if request.method == "POST": 
    form = AddTimeForm(request.POST) 
    form.instance.place_name_id = cpid 
    if form.is_valid(): 
     try: 
      form.save() 
      form = AddTimeForm() 
     except IntegrityError: 
      form.errors["mpr_id"] = ["Ya existe un record"] 
    else: 
     pass 

context = { 
    "title": title, 
    "head": head, 
    "form": form, 
    "cpid": cpid 
} 
return render(request, template_name, context) 

По достоинству оценят h ELP.

+0

AddTimeForm является ModelForm для PlayerRecordTime. Вам нужно проверить, существует ли значение формы mpr_id в записях проигрывателя? Если это так, почему нет связи между Player и PlayerRecordTime? – joanbm

+0

@JoanBlackmoore, потому что я явно забыл упомянуть, что я не настолько разбираюсь в django, и когда я попытался установить связь между Player и PlayerRecordTime в models.py, моя форма создает выпадающий список со списком fo mpr_id, Мне нужно, чтобы в форме мне нужен TextInput. –

+0

Это может быть частью проблемы. Вы должны действительно прочитать Django документы о доступных отношениях модели и определить один. Это позволит устранить дубликаты полей, в том числе. mpr_id. Если mpr_id имеет тип CharField и используется в форме для модели, которая его определяет, он будет представлен текстовым полем ввода по умолчанию, как вы просите. – joanbm

ответ

0

Вы можете проверить, если объект существует в ГЭТ функции()

if request.method == "POST": 
form = AddTimeForm(request.POST) 
form.instance.place_name_id = cpid 
if form.is_valid(): 
    try: 
     plyr = Players.objects.get(mpr_id == form.cleaned_data["mpr_id"]) 
     form.save() 
     form = AddTimeForm() 
    except IntegrityError: 
     form.errors["mpr_id"] = ["Ya existe un record"] 
    except DoesNotExist: 
     //does not save 
else: 
    pass 
+0

Извините, я до сих пор не понимаю. –

+0

О, мой плохой должен объяснить это лучше. Хорошо, вы используете функцию Players.object.get, чтобы получить объект mpr_id формы из базы данных, если она не находится в функции базы данных, вызывает исключение DoNotExist за исключением того, что вы не сохраняете форму в базе данных, потому что вы сказали, что не хотите этого. Если это не вызывает исключения, вы сохраняете форму в базе данных – DreadfulWeather

+0

спасибо, что вы сказали, это дает мне немного света. –

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