Sorry, accidentally pressed "send"
ok, where was I...?
class SomeModel(models.Model):
name = models.CharField(bla bla bla)
#Don't let them edit log_entries in admin
log_entries = models.ManyToManyField(LogEntry, editable=False)
#have a field where they can edit their change.
current_log_entry = models.CharField(blablabla)
def __save__(self):
#take input from current_log_entry, make a new LogEntry
with it
#Then clear current_log_entry so next time they edit it,
they have a blank one
#add a relationship to the LogEntry in log_entries
#call save()
class LogEntry(models.Model):
comment = models.TextField()
pub_date = models.DateField()
Something like that might work, though it's a bit of a hack.
On Jul 11, 1:52 pm, Tavish <[email protected]> wrote:
> I'm fairly new to django and programming in general, but I'll give it
> a shot:
>
> Could you define a separate model for LogEntry's? If you had a
> separate model for the log entries, you could easily define a many-to-
> many field to link them. This isn't semantically beautiful, but it
> might work.
>
> Here's some pseudocode (you'll have to look up the actual ways to
> write this)...
>
> class SomeModel(models.Model):
> name = models.CharField(bla bla bla)
>
> #Don't let them edit log_entries in admin
> log_entries = models.ManyToManyField(LogEntry, editable=False)
>
> #have a field where they can edit their change.
> current_log_entry = models.CharField(blablabla)
>
> On Jul 11, 4:44 am, "Haestan" <[email protected]> wrote:
>
> > > I would like to add a custom field to an existing admin model, namely
> > > LogEntry. The goal is to add a comment field, where custom change
> > > comments can be added in the admin whenever a model is saved.
>
> > > Is it even possible to add such a field without changing the existing
> > > admin codebase? Or would have to define a new model and just
> > > override all the admin's *log* methods to save the log msgs to the
> > > new model?
>
> > > Any hints how this could be done?
> > > Or are the any apps that do similar things, where I could take a look at?
>
> > Actually, I found a way to do it but it's quite ugly and I guess it will be
> > easily broken
> > by any Django updates:
>
> > <code>
> > from django.utils.encoding import smart_unicode
> > class CustomLogEntryManager(models.Manager):
> > def log_action(self, user_id, content_type_id, object_id, object_repr,
> > action_flag, change_message='',
> > change_comment=''):
> > e = self.model(None, None, user_id, content_type_id,
> > smart_unicode(object_id),
> > object_repr[:200], action_flag, change_message, change_comment)
> > e.save()
>
> > from django.contrib.admin.models import LogEntry
> > LogEntry.add_to_class('change_comment', models.CharField(max_length=255,
> > blank=True))
> > LogEntry.add_to_class('objects', CustomLogEntryManager())
> > </code>
>
> > Then I just override any admin methods that use LogEntry.log_action(...) to
> > also pass a change_comment
> > parameter.
>
> > Can anyone think of a better way to do this?
> > Btw, I'am using 1.0.2 at the moment. Would v1.1 offer anything that would
> > make this more easy to implement?
>
> > I'm grateful for any hints, design tips, etc.
>
> > Thanks,
>
> > tom.
>
> > PS: sorry, that I send this mail again, I somehow managed to reply to the
> > wrong
> > message in the first place.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---