我想創建一個應用程序,我可以爲用戶保存時間戳。現在,我的表單可以正常工作,但我需要確保mul_id在form.save()之前存在於Player表中。我怎樣才能讓我的應用程序執行該操作?Django從數據庫中獲取值form.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。
AddTimeForm存在對象是PlayerRecordTime的ModelForm。你是否需要檢查播放器記錄中是否也存在mpr_id表單值?如果那爲什麼玩家和PlayerRecordTime之間沒有關係? – joanbm
@JoanBlackmoore因爲我清楚地忘了提,我不那麼專家Django的,當我試圖讓在models.py Player和PlayerRecordTime之間的關係,我的形式產生下拉與名單FO mpr_id的和我不我想要的是,我需要一個TextInput的形式。 –
恩,這可能是問題的一部分。你應該真正閱讀有關可用模型關係的Django文檔並定義一個。這將解決領域重複,包括。 mpr_id。如果mpr_id的類型爲CharField,並且在定義它的模型中使用,則默認情況下,它將使用文本輸入字段來表示,就像您請求的一樣。 – joanbm