Skip to main content
 首页 » 编程设计

python之django 自动填充管理中的 manytomany 字段

2025年05月04日38pengyingh

美好的一天,不久前,与 Django 一起工作。 遇到以下问题。

有两种模式

class Product(models.Model): 
    productID       = models.AutoField(primary_key=True) 
    brandID         = models.ForeignKey(Brand, verbose_name=u'Бренд') 
    categoryID      = models.ForeignKey(Category, verbose_name=u'Категория') 
    productPhotos   = models.ManyToManyField("ProductPhoto", verbose_name = "Фотографии товара", related_name="photos", blank=True) 
 
class ProductPhoto(models.Model): 
    productPhotoID      = models.AutoField(primary_key=True) 
    productID           = models.ForeignKey(Product) 
    imageFile           = models.FileField(u'Путь к изображение', upload_to=makeUploadPath) 
    dateModified        = models.DateField(auto_now=True) 

对于管理员,请使用以下 TabularInline

class ProductPhotoInline(admin.TabularInline): 
    model = ProductPhoto 
    verbose_name = u"Фото" 
    verbose_name_plural = u"Фотографии" 
 
class ProductAdmin(admin.ModelAdmin): 
    list_display = ('title') 
    search_fields = ... 
    fieldsets = ... 
    ) 
    inlines = [ ProductPhotoInline, ] 

添加产品时出现的问题,表ProdcutPhoto productId 字段被填充,而Products 表productPhotos 字段为空。如何最好地填写这两个字段。

请您参考如下方法:

您应该删除 productPhotos ManyToMany 字段,它是多余的。如果每张照片仅附加到一个产品,那么您只需要产品 ID 外键。

要访问产品实例中的照片,您可以使用 productphoto_set,例如

product = Product.objects.get(pk=1) 
photos = product.productphoto_set.all()