【发布时间】:2010-11-03 17:51:50
【问题描述】:
我正在尝试设置一个项目列表,当我设置一个项目时,它有一个项目编号(例如 10-1000)。我希望能够添加一个新项目并将其附加 1 到项目编号(例如,下一个项目 # 将是 10-1001)。我在弄清楚第一步时遇到了一些麻烦。
这是我的models.py
class Project(models.Model):
client = models.ForeignKey(Clients, related_name='projects')
created_by = models.ForeignKey(User, related_name='created_by')
#general information
proj_name = models.CharField(max_length=255, verbose_name='Project Name')
quote = models.CharField(max_length=10, verbose_name='Quote #', unique=True)
desc = models.TextField(verbose_name='Description')
starts_on = models.DateField(verbose_name='Start Date')
completed_on = models.DateField(verbose_name='Finished On')
def __unicode__(self):
return u'%s' % (self.proj_name)
#get the current status of the projectget_value_display
def current_status(self):
try:
return self.status.all().order_by('-id')[:1][0]
except:
return None
我的views.py显示了添加
@login_required
def addProject(request):
if request.method == 'POST':
form = AddSingleProjectForm(request.POST)
if form.is_valid():
project = form.save(commit=False)
project.created_by = request.user
today = datetime.date.today()
project.quote = "%s-%s" % (str(today.year)[2:4], project.quote)
project.save()
project.status.create(
value = form.cleaned_data.get('status', None)
)
return HttpResponseRedirect('/project/')
else:
form = AddSingleProjectForm()
return render_to_response('project/addProject.html', {
'form': form, 'user':request.user}, context_instance=RequestContext(request))
还有我的forms.py
class AddSingleProjectForm(ModelForm):
status = forms.ChoiceField(choices=STATUS_CHOICES)
def __init__(self, *args, **kwargs):
super(AddSingleProjectForm, self).__init__(*args, **kwargs)
self.fields['status'].initial = self.instance.current_status()
class Meta:
model = Project
exclude = ('pre_quote', 'created_by')
def save(self, force_insert=False, force_update=False, commit=True):
f = super(AddSingleProjectForm, self).save(commit=False)
if commit:
f.save()
print "form save method was called with commit TRUE"
return f
任何建议将不胜感激。
谢谢大家!
【问题讨论】:
-
我假设“报价”字段是您希望这些数字去的地方?您在文本中始终将其称为“项目编号”。其次,Form 的 Meta.exclude 中的“pre_”前缀是什么意思?
-
是的,报价字段将是项目编号。抱歉,这是我忘记删除的旧代码段。
标签: python django django-models django-forms django-views