django autocompletar campo manytomany en admin

Buen día, no hace mucho tiempo, trabajando con Django. Se encontró con el siguiente problema.

Hay dos modelos

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)

Para el administrador, use el siguiente 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, ]

El problema cuando agrega un producto en el campo productId de la tabla ProdcutPhoto está lleno, y el campo en la tabla Products productPhotos está vacío. La mejor manera de hacer para llenar ambos campos.

preguntado el 01 de julio de 12 a las 17:07

Solo curiosidades. ¿Por qué quieres editar esto en línea? Usted definió productPhotos en su clase Product. En este caso, la interfaz de administración del Producto debería darle la posibilidad de elegir una Foto de producto existente o agregar una nueva si lo desea. -

1 Respuestas

Debe eliminar el campo productPhotos ManyToMany, es redundante. Si cada foto solo se adjunta a un producto, entonces el ID de producto ForeignKey es todo lo que necesita.

Para acceder a las fotos desde una instancia de producto, puede usar productphoto_set, p.ej

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

Respondido 01 Jul 12, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.