反向查找Django模型

2024-05-18 06:36:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有图像拍摄和图像模型。我正在尝试添加反向查找,比如哪个图像属于哪个ImageShoot。一张照片可以有多张照片

class ImageShoot(models.Model):
      name = models.CharField(max_length=100)
      created_at = models.TimeField(auto_now_add=True)

      def __str__(self):
          return self.name


class Image(models.Model):
      license_type = (
         ('Royalty-Free','Royalty-Free'),
         ('Rights-Managed','Rights-Managed')
             )

      image_number = models.CharField(default=random_image_number,max_length=12)
      title = models.CharField(max_length = 100)
      image = models.ImageField(upload_to = 'home/tboss/Desktop/image' , default = 'home/tboss/Desktop/image/logo.png')
      category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.CASCADE)
      shoot = models.ForeignKey(ImageShoot, on_delete=models.CASCADE, related_name='Image')
      image_keyword = models.TextField(max_length=1000)
      credit = models.CharField(max_length=150, null=True)
      location = models.CharField(max_length=100, null=True)
      license_type = models.CharField(max_length=20,choices=license_type, default='')
      uploaded_at = models.TimeField(auto_now_add=True)

      def __str__(self):
          return self.title

管理员.py:

@admin.register(ImageShoot)
class Imageset(admin.ModelAdmin):
      list_display = ('name','created_at','associated_image')
      def Imageset(self, obj):
          associated_image = ImageShoot.image_set.all()
          return associated_image

此admin.py显示错误:

<class 'image.admin.Imageset'>: (admin.E108) The value of 'list_display[2]' refers to 'associated_image', which is not a callable, an attribute of 'Imageset', or an attribute or method on 'image.ImageShoot'

Tags: name图像imageselftrueadminmodelslength
1条回答
网友
1楼 · 发布于 2024-05-18 06:36:14

代码中可能有点复杂,但基本上我会遍历相关图像并为每个图像生成一个链接,最后将所有链接连接在一起并返回:

from django.utils.html import format_html


@admin.register(ImageShoot)
class Imageset(admin.ModelAdmin):
    list_display = ('name','created_at','associated_images')

    def associated_images(self, obj):
        associated_images = obj.image_set.all()
        links = []
        for image in associated_image
            url = reverse('admin:<your_app_name>_image_change', args = [image.id]
            links.append(format_html("<a href='{}'>{}</a>", url, image.title))
        return ', '.join(links)

相关问题 更多 >