Thanks Tim. That's funny you just posted that because I just got done doing that and was going to post it as solved.
Cheers, J On Nov 25, 1:48 pm, Tim Valenta <tonightslasts...@gmail.com> wrote: > I know how messed up this all seems, so I sympathize. I totally want > to store items according to a related object's name or id or whatever. > > However, I'm using upload_to in a more straightforward manner, and it > seems to work out alright. Tell me if you've already tried it this > way: > > class ScreenShot(models.Model): > def _image_location(instance, filename): > return ''.join("web_projects/%Y/", instance.project.slug, > "/", filename) > # ... > image = models.ImageField(upload_to=_image_location) > > The thing you pass to your field's "upload_to" value can be a > callable, which takes two arguments: the instance of `ScreenShot` > being altered, and the filename of the original file that was > uploaded. You then just return a string of the path to save in, > including the filename. > > It's all described here, which it looks like you've already > read:http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.mod... > > Does that not work for you? I do exactly the same thing for various > fields on some of my models. I could see how it might complicate > things if you were doing it on an inline..... I admit that I haven't > tried that one out, as luck would have it. If the main model already > exists, it should work, though. > > Just brainstorming to find a simpler solution. Have you already tried > it that way? > > Tim > > On Nov 25, 12:08 pm, neridaj <neri...@gmail.com> wrote: > > > I'm trying to access the current instance of ScreenShot related to the > > current instance of WebProject, in order to get the slug field of > > WebProject to use as a upload directory but I don't think I can > > because there's no primary key in the db yet. I need to call > > change_upload_to when the instance of WebProject tries to save because > > it saves before the instance of ScreenShot i.e., before slug is > > obtained to append to the upload_to directory. Are you suggesting I > > should just add the ImageField to the WebProject class? I don't want > > to have a fixed number of ImageFields for WebProject, if there's a way > > to do that without using another class that would work. Can I access > > the save method of ScreenShot from WebProject? Should I just add > > another slug field to ScreenShot? > > > class ScreenShotInline(admin.StackedInline): > > model = ScreenShot > > extra = 3 > > > class WebProjectAdmin(admin.ModelAdmin): > > prepopulated_fields = {'slug': ('title',)} > > inlines = [ScreenShotInline] > > > On Nov 25, 9:46 am, Preston Holmes <pres...@ptone.com> wrote: > > > > I'm a bit confused on a few points here. The upload_to field > > > attribute should be atomic to the imagefield - it doesn't rely on > > > related models. > > > > your change_upload_to creates a new screenshot - but doesn't connect > > > it to the current WebProject instance. Is that what you are trying to > > > do? > > > > s = ScreenShot(project=instance) > > > > Is there a reason your WebProject is not defined when you create a > > > screenshot in your view? > > > > Something about this seems like it is making it more complicated than > > > it needs to be. but details are lacking t > > > > -Preston > > > > On Nov 24, 5:52 pm, neridaj <neri...@gmail.com> wrote: > > > > > Hello, > > > > > I'm trying to change the upload_to attribute of an ImageField so that > > > > it is in the format "web_projects/year/slug/". The problem I am having > > > > is that the ForeignKey model is getting saved before the related > > > > ScreenShot model is able to call it's save method to change upload_to. > > > > I'm trying to use a pre_save signal to reverse the order of saving but > > > > I'm not sure how to access the current instance of the ScreenShot > > > > model to call it's save method. Thanks for any suggestions. > > > > > class ScreenShot(models.Model): > > > > project = models.ForeignKey(WebProject) > > > > image = models.ImageField(upload_to="web_projects/%Y/") > > > > page_title = models.CharField(max_length=250, > > > > help_text="Maximum 250 > > > > characters.") > > > > > def __unicode__(self): > > > > return self.page_title > > > > > def save(self): > > > > > > > > self.image.upload_to="web_projects/%Y/"+self.project.slug > > > > super(ScreenShot, self).save() > > > > > def change_upload_to(sender, **kwargs): > > > > s = ScreenShot() # not sure how to access current instance > > > > s.save() > > > > > pre_save.connect(change_upload_to, sender=WebProject) -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.