Thanks for the advice, as usual with me, it's thrown up more questions... :D
On 26 January 2011 12:20, Adrian Bool <aid@logic.org.uk> wrote:
> I have two models, the first is a 'change request ticket' and the
> second reflects the status of that ticket. They are linked by a
> ForeignKeyField on the first table.
>
> You may find it best to collapse them into a single object; using the
> 'choice' option to allow the user to set the ticket's state.
Unfortunately this isn't an option for this value, these need to be as
flexible as possible, hard-coding into the model isn't an option. :(
> The two problems that I have are:
>
> 1) Some of the 'states' should mark the ticket as closed, so when the
> ticket is saved with the state of 'closed', it should be marked as
> 'completed' with the date and time the action was carried out.
>
> You can jump in and change the model's data before the model is saved by
> over-riding the 'save' method in your model.
> Below is one of my models. My frequency attribute could be quite similar to
> what you need for your state field. Below you can see where I'm setting a
> number of my attributes (based upon the parent object when the Charge object
> is created as an Inline) before this Charge is saved,
> class Charge (models.Model):
> CHARGE_FREQUENCY_CHOICES = (
> (u'NRC', u'Non-Recurring'),
> (u'MRC', u'Monthly'),
> (u'QRC', u'Quaterly'),
> (u'ARC', u'Annual')
> )
>
> frequency = models.CharField(max_length=15,
> choices=CHARGE_FREQUENCY_CHOICES)
> <cut more attributes>
>
> def save(self, *args, **kwargs):
> self.description = self.service
> self.customer = self.service.customer
> self.legacy_charge_id = None
> self.prorata = False
> self.created_date = datetime.date.today()
> self.started_date = self.service.completed_date
> self.expiry_date = self.service.expiry_date
> self.terminated_date = self.service.terminated_date
> super(Charge, self).save(*args, **kwargs)
Hmmm, I'm obviously missing something. I want to execute something
like the following:
class ChangeStatus(models.Model):
Description = models.CharField(max_length=128)
ClosesChangeRequest = models.BooleanField()
def __unicode__(self):
return self.Description
class ChangeHeader(models.Model):
Title = models.CharField(max_length=255)
Requestor = models.ForeignKey(User)
Summary = models.TextField()
AffectedItems = models.ManyToManyField(ConfigurationItem)
ScmRepo = models.ForeignKey(ScmRepo)
Created = models.DateField()
Due = models.DateTimeField()
Status = models.ForeignKey(ChangeStatus)
Completed = models.BooleanField()
def save(self,*args,**kwargs):
if not self.id:
self.created = datetime.date.today()
if self.Status.ClosesChangeRequest == True:
self.completed = True
super(ChangeHeader, self).save(*args,**kwargs)
but I assume the issue I'm running in to is that the Save handler
doesn't know the current state of the Status field.
Is there a better approach which avoids hard-coding?
Thanks,
M.
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment