简体   繁体   English

反向查找 Django 模型

[英]reverse lookup django models

i have ImageShoot and Image model.我有 ImageShoot 和 Image 模型。 I am trying to add reverse lookup like which Image belongs to which ImageShoot.我正在尝试添加反向查找,例如哪个图像属于哪个 ImageShoot。 one ImageShoot can have multiple Images一个 ImageShoot 可以有多个 Image

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

admin.py:管理.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

this admin.py showing error:这个 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'

It may seem a bit complicated in the code, but basically I'm iterating over the related images and generate a link for each of them, and finally join all the links together and return it:代码中可能看起来有点复杂,但基本上我是遍历相关图像并为每个图像生成一个链接,最后将所有链接连接在一起并返回它:

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)

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

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