【发布时间】:2013-01-26 18:40:51
【问题描述】:
当用户在表单中保存数据而不是使用 django 管理员时,我想使用 unique_together 选项。
models.py:
from django.db import models
from django.contrib.auth.models import User
class ezApp(models.Model):
name = models.SlugField(max_length=50, unique=True )
date_created = models.DateTimeField('date created', auto_now_add=True)
date_updated = models.DateTimeField('date updated', auto_now=True)
created_by = models.ForeignKey(User)
in_use = models.BooleanField()
class Meta:
unique_together = (('name', 'created_by'),)
forms.py
from django.forms import ModelForm
from django.forms.models import BaseModelFormSet
from ezApp.models import *
class BaseEzAppFormSet(BaseModelFormSet):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super(BaseEzAppFormSet, self).__init__(*args, **kwargs)
def save_new(self, form, commit=True):
obj = form.save(commit=False)
obj.created_by = self.user
if commit:
obj.save()
return obj
views.py:
from django.shortcuts import *
from ezApp.models import *
from django.forms.models import modelformset_factory
from django.http import HttpResponseServerError
from ezApp.forms import *
def createEzAppInstance(request):
if request.method == 'POST':
ezAppFormSet = modelformset_factory(ezApp, extra=1, fields=('name'), formset=BaseEzAppFormSet)
formset = ezAppFormSet(request.POST, request.FILES, user=request.user)
if formset.is_valid():
formset.save()
return render_to_response("ezApp/manage_new_ezApp.html", {'formset': formset, 'title': "New App"}, context_instance=RequestContext(request))
else:
error_msg = u"You are not logged in"
return HttpResponseServerError(error_msg)
在模型的 Meta 中使用 unique_together,验证仅在 django admin 内部有效,但在我使用表单保存新数据时无效。
【问题讨论】:
-
是否是复制/粘贴问题,但 Meta 类的缩进应该与 ezApp 中的字段相同
-
发布视图代码,您是否正在验证表单集?为什么在表单集中使用 save_new 而不是覆盖表单的 save() 方法并调用 Super()?
-
同时发布您的表单代码!
-
意见和表格已发布!谢谢
标签: django django-models django-forms