我剛剛完成了電子郵件註冊表單的Django教程,我試圖調整代碼的某些部分以匹配我的需要(向註冊表單中添加一個附加字段)Django - 從數據庫中保存表單的數據
基於我創建了一個電子郵件註冊模型的形式教程:
class JoinForm(forms.ModelForm):
class Meta:
model = Join
fields = ["email","wunschrad"]
,我加入了wunschrad
場
然後我更新了我的模型,包括wunschrad
改變它一點點,同步的數據庫與南方,所有的工作國王罰款。低於我的模型:
class Join(models.Model):
email = models.EmailField()
wunschrad = models.CharField(max_length=120)
friend = models.ForeignKey("self", related_name='referral', null=True, blank=True)
ref_id = models.CharField(max_length=120, default='ABC', unique=True)
ip_address = models.CharField(max_length=120, default='ABC')
timestamp = models.DateTimeField(auto_now_add = True, auto_now = False)
updated = models.DateTimeField(auto_now_add = False, auto_now = True)
def __unicode__(self):
return "%s" % (self.email)
class Meta:
unique_together = ("email", "ref_id",)
我遇到問題的地方是如何採用我的觀點來反映這種變化。下面是我做的(註釋中強調我的變化)
def home(request):
try:
join_id = request.session['join_id_ref']
obj = Join.objects.get(id=join_id)
except:
obj = None
form = JoinForm(request.POST or None)
if form.is_valid():
new_join = form.save(commit=False)
email = form.cleaned_data['email']
wunschrad = form.cleaned_data['wunschrad'] #I ADDED THIS
new_join_old, created = Join.objects.get_or_create(email=email, wunschrad=wunschrad) # I ADDED WUNSCHRAD HERE
if created:
new_join_old.ref_id = get_ref_id()
if not obj == None:
new_join_old.friend = obj
new_join_old.ip_address = get_ip(request)
new_join_old.save()
return HttpResponseRedirect("/%s" %(new_join_old.ref_id))
context = {"form": form}
template = "home.html"
return render(request, template, context)
我的問題/問題如下:這段代碼的工作,但如果用戶註冊使用相同的電子郵件地址,並選擇一次wunschrad的第一個選項第二次第二個選項(澄清:wunschrad是一個有兩個選項的下拉列表)Django在數據庫中保存兩個版本,如下所示:Django Admin Screenshot
有沒有人有一個想法如何改變代碼每個用戶只能保存一次?
很多人提前感謝您的幫助!