1

基本モデルとプロキシ モデルがあります。「file_type」フィールドに依存する「image」フィールドのupload_toの値を変更したい。これを行う方法がわかりません。.Manager クラスまたは Proxy クラスで指定する必要がありますか。これを行う方法と同じ詳細を教えてください。

class FileDescription(models.Model):

    class Meta:
        ordering = ['file_creation_time']

    TYPE_CHOICES = (
        ('homework', 'Homework'),
        ('class', 'Class Papers'),
        ('random', 'Random Papers')                    
    )

    subject = models.ForeignKey('Subjects', null=True, blank=True, primary_key=True)
    subject_name = models.CharField(max_length=100, unique=False)
    file_type = models.CharField(max_length=100, choices=TYPE_CHOICES) 
    ....
    ....
    image = models.ImageField(upload_to= ???????????      blank=True, null=True, max_length=255)

    def __unicode__(self):
        return u'%s' % (self.file_name)

class HomeworkManager(models.Manager):
    def get_query_set(self):
        qs = super(HomeworkManager, self).get_query_set().filter(file_type='homework')
        return qs

class ClassPapersManager(models.Manager):
    def get_query_set(self):
        qs = super(HomeworkManager, self).get_query_set().filter(file_type='class')
        return qs

class RandomPapersManager(models.Manager):
    def get_query_set(self):
        qs = super(HomeworkManager, self).get_query_set().filter(file_type='random')
        return qs

class Homework(FileDescription):

    class Meta:
        proxy = True
4

1 に答える 1

2

upload_to異なるサブクラスを処理するようにメソッドを変更するだけで、置換について心配する必要はありません(まだメソッドを使用しupload_toていない場合は、メソッドを使用してください)。

def my_upload_to(instance, filename):
    if instance._meta.module_name == 'homework':
        return '/path/to/homework/files/%s' % filename
    if instance._meta.module_name == 'classpaper':
        return '/path/to/classpaper/files/%s' % filename
    if instance._meta.module_name == 'randompaper':
        return '/path/to/randompaper/files/%s' % filename
于 2012-07-25T21:09:20.700 に答える