繁体   English   中英

限制Django模型中的图片

[英]Limit pictures in django model

我有工作代码-管理员只能在管理面板中添加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)

对?

谢谢。

只需覆盖模型的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM