django admin内联组件

时间:2013-02-06 18:38:57

标签: python django django-models django-admin

我开始学习django,我有疑问。这是我的模特:

from django.db import models

class Color(models.Model):
    title = models.CharField(max_length=30)
    code = models.CharField(max_length=7)
    def __unicode__(self):
        return '{0} ({1})'.format(self.title, self.code)

class Image(models.Model):
    color = models.ForeignKey(Color)
    src = models.ImageField(upload_to='media/img/')
    alt = models.CharField(max_length=255)
    def __unicode__(self):
        return '{0} ({1})'.format(self.alt, self.color.title)

class Manufacturer(models.Model):
    title = models.CharField(max_length=255)
    image = models.ForeignKey(Image)
    def __unicode__(self):
        return self.title

我需要有可能在制造商的页面上编辑图像实例(制造商有一个图像)。我怎么能在admin.py

中做到这一点

我需要类似的东西:

class ImageInline(admin.TabularInline):
    model = Image

class ManufacturerAdmin(admin.ModelAdmin):
    inlines = [ImageInline]

但我收到了

  

例外值:

     

< class'stalog.models.Image'>没有ForeignKey到< class   'catalog.models.Manufacturer' >

我需要一个制造商的图像

第二个: 我计划创建产品模型,一个产品可以有很多图像。我想我应该创造多对多的关系。那么如何用很多图像描述管理中的产品呢?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

异常消息告诉你一切。您需要将FK关系添加到图像模型:

manufacturer = models.ForeignKey(Manufacturer)

如果一个制造商只需要一张图片,请考虑将其放入制造商型号。这将更有效(更少的数据库查询或“select_related”功能)并且更易于管理。

对于Product和Image之间的多对多关系 - 只需在Product模型中使用ManyToManyField(https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/)并保持Image模型不变。