1

django-filebrowser を使用して、モデル自体のキーに基づいFileBrowserFieldてパラメーターを割り当てようとしています。directoryブログの例を使用すると、さまざまな投稿の写真を保存する場合、写真はブログ ID にちなんで名付けられたディレクトリに保存されます。したがって、パラメータを動的MEDIA_ROOT/some/path/to/media/filebrowser_files/割り当てたい場合directoryMEDIA_ROOT+str(model_pk)

この時点で、次のようなことをしようとしましたが、現在のオブジェクトの ID を取得する方法がわかりません。(DoesNotExist 例外と「例外が提供されていません」) self.page を使用しようとするとエラーが発生することはわかっていますが、これを正しく行う方法がわかりません。私のロジックのどこに欠陥があり、それを修正するために何ができるかについて、誰かが洞察を提供できますか? どうもありがとう。

class PageImage(models.Model):
    page = models.ForeignKey(Page)
    page_photo = FileBrowseField("Image", max_length=200, blank=True, null=True)
    def __init__(self, *args, **kwargs):
        super(PageImage, self).__init__(*args, **kwargs)
        path = settings.MEDIA_ROOT+'pages/unfiled/'
        if self.page:
            path = settings.MEDIA_ROOT+'pages/'+str(self.page)+'/'
        if not os.path.exists(path):
            os.makedirs(path)
        self._meta.get_field_by_name("page_photo")[0].directory = path
4

1 に答える 1

1

私はあなたのコードを詳しく見ていないことに気づきました。Model インスタンスを初期化していて、self.page がデータベース内のページに設定されていないため、self.page は機能しません。代わりに試してください:

class PageImage(models.Model):
    page = models.ForeignKey(Page)
    page_photo = FileBrowseField("Image", max_length=200, blank=True, null=True)

    def save(self, *args, **kwargs):

        path = settings.MEDIA_ROOT+'pages/unfiled/'
        if self.page:
            path = settings.MEDIA_ROOT+'pages/'+str(self.page)+'/'
        if not os.path.exists(path):
            os.makedirs(path)
        self._meta.get_field_by_name("page_photo")[0].directory = path
        super(PageImage, self).save(*args, **kwargs)

PageImage のフィールドに Page を割り当てた後にのみ、必要なことを行います。

于 2011-10-27T04:07:29.277 に答える