2010-11-03 2 views
0

Я пытаюсь создать список проектов, где, когда я настраивал проект, у него есть номер проекта (пример 10-1000). Я хочу добавить новый проект и добавить его к номеру проекта (например, следующий проект # будет 10-1001). У меня есть немного проблемы с выяснением первого шага.Приращение предыдущей записи 1

вот мой 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 

Любые предложения будут с благодарностью.
Спасибо всем!

+0

Я предполагаю, что поле «quote» - это то место, где вы хотите, чтобы эти цифры шли? Вы ссылаетесь на него последовательно в тексте как «номер проекта». А во-вторых, что означает префикс pre_ в метафорическом выражении вашей формы? –

+0

Да, поле цитаты будет номером проекта. Прошу прощения, это старый сегмент кода, который я забыл удалить. – TheLifeOfSteve

ответ

0

Мне кажется, что ваша «цитата» - это две вещи: монотонно увеличивающийся «номер проекта» и год. Поскольку это то, что они есть, у них есть регулярная структура. Исключите их из своей формы и полностью просмотрите и создайте два новых поля: «quote_year» и «quote_id».

Ваш бросок будет выглядеть примерно так:

def save(self, *args, **kwargs): 
    if not self.quote_year and not self.quote_id: 
     self.quote_year = datetime.date.today().year % 100 
     quote_ids = self.objects.filter(quote_year = self.quote_year).order_by('-quote_id') 
     self.quote_id = 1 
     if quote_ids.exists(): 
      self.quote_id = quote_ids[0].quote_id + 1 
    super(Project, self).save(*args, **kwargs) 

В основном это тесты, чтобы увидеть, если есть какие-либо quote_ids за текущий год и, если нет, то инициализация 1, в противном случае инициализация самой высокой quote_id плюс 1.

для того, чтобы сохранить себя горе снова и снова делает кавычки ID, добавьте это к вашей модели, а также:

@property 
def quote(self): 
    return '%02d-%05d' % (self.quote_year, self.quote_id) 

Мой код Assum что вы хотите, чтобы часть проекта с номером сбрасывалась до нуля для первого проекта каждого года.

+0

Большое спасибо. – TheLifeOfSteve

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