如何在django模板中使用多个图像更新post

yeotifhr  于 2023-06-07  发布在  Go
关注(0)|答案(1)|浏览(119)

我有两个模型1-后2-postimage,使后可以有多个图像,所以我有一个麻烦,以更新后,它的图像在我的模板
我不喜欢上传多个图像,当我创建一个职位,把我不知道如何做到这一点与更新后,所以可以任何一个告诉我如何做到这一点,或给予我一个教程链接,因为我搜索了很多,找不到任何教程
这是我的模特

class Post(models.Model, HitCountMixin):
    ch = [
            ('pvp','pvp'),
            ('Default','Default'),
            ('bedrock','bedrock')
        ]
    xch = [
        ('x1','x1'),
        ('x4','x4'),
        ('x8','x8'),
        ('x16','x16'),
        ('x32','x32'),
        ('x64','x64'),
        ('x128','x128'),
        ('x256','x256'),
        ('x512','x512'),

    ]
    vch = [
        ('1.7','1.7'),
        ('1.8','1.8'),
        ('1.9','1.9'),
        ('1.10','1.10'),
        ('1.11','1.11'),
        ('1.12','1.12'),
        ('1.13','1.13'),
        ('1.14','1.14'),
        ('1.15','1.15'),
        ('1.16','1.16'),
        ('1.17','1.17'),

    ]
    author =  models.ForeignKey(Profile,on_delete=models.CASCADE)
    title = models.CharField(max_length=150)
    content = models.TextField()
    mainimage = models.ImageField(null=True ,upload_to=thumbnail_upload_to)
    rpfile =  models.FileField(null=True, upload_to=file_upload_to)
    version = models.CharField(max_length=50, null=True)
    xnumber = models.CharField(max_length=50, choices=xch, null=True)
    category = models.CharField(max_length=50, choices=ch, null=True)
    discord_id = models.CharField(max_length=150)
    date_added = models.DateTimeField(auto_now_add=True)
    hit_count_generic = GenericRelation(
    HitCount, object_id_field='pk',
    related_query_name='hit_count_generic_relation')
    likes = models.ManyToManyField(User, related_name='blog_posts')
    private = models.BooleanField(default=False)
    proved = models.BooleanField(default=False)
    
    def total_likes(self):
        return self.likes.count()
    def __str__(self):
        return str(self.title)[:30]
    

    def save(self, *args, **kwargs):
      if self.pk is None:
        saved_image = self.mainimage
        self.mainimage = None
        rpfile = self.rpfile
        self.rpfile = None
        super().save(*args, **kwargs)
        self.mainimage = saved_image
        self.rpfile = rpfile
        if 'force_insert' in kwargs:
          kwargs.pop('force_insert')
        super().save(*args, **kwargs)

    class Meta:
        ordering = ['-date_added']
    def get_absolute_url (self):
        return reverse('post_detail', kwargs={'pk': str(self.pk)})


class PostImage(models.Model):
    post = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
    images = models.FileField(upload_to =in_post_images_upload_to)
    def save(self, *args, **kwargs):
      if self.pk is None:
        saved_image = self.images
        self.images = None
        super().save(*args, **kwargs)
        self.images = saved_image
        if 'force_insert' in kwargs:
          kwargs.pop('force_insert')
      super().save(*args, **kwargs)

    def __str__(self):
        return self.post.title
oalqel3c

oalqel3c1#

您可以使用Django内联管理,Django管理界面能够在同一页面上编辑模型作为父模型。这些称为内联。如上述型号:

# admin.py

from django.contrib import admin

from .models import (
    Post, PostImage
)

admin.site.register(PostImage)

class PostImageInline(admin.TabularInline):
    model = PostImage
    readonly_fields = ('id', 'post',)
    extra = 1

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    inlines = [PostImageInline, ]

这将允许用户在同一页面上添加多个图像以编辑或创建帖子。
参考号:Django Inline Admin

相关问题