限制django模型中的图片

时间:2014-01-07 09:29:51

标签: python django

我有工作代码 - 管理员只能在管理面板中添加4张图片。但是用户也可以在他的用户界面中添加图像。如何为用户做同样的规则(只有4张图片)?

models.py:

class PicturesManager(models.Manager):
    def create_pictures(self, car, img):
        pictures = self.create(car=car, image=img)
        return pictures

class Pictures(models.Model):
    car = models.ForeignKey(Car, verbose_name="Car", related_name='pictures')
    width = models.PositiveIntegerField(editable=False, default=780)
    height = models.PositiveIntegerField(editable=False, default=585)
    image = models.ImageField(verbose_name="Photo", upload_to = get_file_path, max_length=64, height_field='height', width_field='width'
        )
    objects = PicturesManager()
    def __unicode__(self):
        return str(self.id)

admin.py:

class PicuresInline(admin.TabularInline):
    model = Pictures
    extra = 4
    # only 4 pictures
    def has_add_permission(self, request):
        count = Pictures.objects.all().count()
        main = Pictures.objects.all().filter(main=True).count()
        count = Pictures.objects.filter(main=True).count()
        if count <= 4:
            return True
        else:
            return False

那么,在保存图像之前,我可以将has_add_permission复制到Pictures类并在视图中进行检查吗?它需要,因为用户可以编辑图像(删除或上传新的​​)。但是在 admin.py 我使用main = True,它是否可以在 model.py 中使用?

如何检查第一次,用户上传文件的时间(多少):

if request.FILES <= 4:
    pictures_save(car, request.FILES)

右?

感谢。

1 个答案:

答案 0 :(得分:0)

只需覆盖模型的save方法,无论上传者是谁,都会将图片限制为四个:

class Pictures(models.Model):
    # your normal fields here

    def save(self, *args, **kwargs):
        if Pictures.objects.filter(main=True, car=self.car).count() >= 4:
            return # Don't save if its already more than 4
        else:
            super(Picture, self).save(*args, **kwargs)

    def __unicode__(self):
        return unicode(self.id)  # unicode methods should return unicode