Inserir várias imagens no mesmo registo no GridFS

33 views
Skip to first unread message

Hélio Miranda

unread,
May 15, 2013, 5:59:27 AM5/15/13
to django...@googlegroups.com
Oi.

Na minha aplicação Django e mongodb estou a inserir fotos no gridfs do mongo.
Inserir apenas uma foto, num registo, tudo ok.

Agora quando quero inserir mais que uma, não estou a conseguir. Estou a definir como uma lista, mas dá erro.
Estou a fazer este teste, para comecar:

class Painting(Document):
    artist = StringField()
    photo = ListField(FileField())

my_painting = Painting(artist='Steve')
my_painting.photo = open('C:/BD.JPG', 'r')
my_painting.save()

Mas dá me o seguinte erro: ValidationError(Only lists and tuples may be used in a list field: ['photo'])
Sim, eu percebo que só posso inserir listas ou tuplas num campo list field...mas não estou a perceber como o fazer??
Alguém me pode ajudar?

Andrews Medina

unread,
May 15, 2013, 12:17:25 PM5/15/13
to django...@googlegroups.com
Olá,

2013/5/15 Hélio Miranda <heli...@gmail.com>:
>
> class Painting(Document):
> artist = StringField()
> photo = ListField(FileField())
>
> my_painting = Painting(artist='Steve')
> my_painting.photo = open('C:/BD.JPG', 'r')
> my_painting.save()
>
> Mas dá me o seguinte erro: ValidationError(Only lists and tuples may be used
> in a list field: ['photo'])
> Sim, eu percebo que só posso inserir listas ou tuplas num campo list
> field...mas não estou a perceber como o fazer??

O my_paiting.photo é uma lista. Basta usar os métodos de uma lista:

my_painting.append(open('C:/BD.JPG', 'r'))

Valeu!
--
Andrews Medina
www.andrewsmedina.com

Hélio Miranda

unread,
May 15, 2013, 12:42:54 PM5/15/13
to django...@googlegroups.com
Estás a dizer fazer algo assim:
class Painting(Document):
    artist = StringField()
    photo = ListField(FileField())

my_painting = Painting(id='51938efa8774a71a20e6d69e')
my_painting.photo = my_painting.append(open('C:/BD.JPG', 'r'))
my_painting.save()

É que assim dá-me erro: 'Painting' object has no attribute 'append'
Estou a tentar inserir  uma imagem naquele registo...

O que estou a fazer mal?

Andrews Medina

unread,
May 15, 2013, 2:28:08 PM5/15/13
to django...@googlegroups.com
Desculpa, o certo seria:

my_painting = Painting(id='51938efa8774a71a20e6d69e')
my_painting.photo.append(open('C:/BD.JPG', 'r'))
my_painting.save()

Hélio Miranda

unread,
May 16, 2013, 4:30:38 AM5/16/13
to django...@googlegroups.com
Oi
Estou a tentar fazer como disseste, assim:

my_painting = Painting(artist='Steve')
my_painting.photo.append(open('C:/BD.JPG', 'r')) 
my_painting.save() 

Mas dá-me erro: ValidationError('file' object has no attribute 'grid_id': ['photo'])
Sabes qual é o problema?

Hélio Miranda

unread,
May 17, 2013, 4:13:03 AM5/17/13
to django...@googlegroups.com
Pelo que li, só posso inserir um ficheiro por documento, logo o que eu quero fazer que é ter um registo(documento) com vários ficheiros não posso fazer...

É verdade, que só posso inserir um ficheiro por documento?

Hélio Miranda

unread,
May 20, 2013, 6:33:57 AM5/20/13
to django...@googlegroups.com
Estou a tentar fazer desta maneira:
class Painting(Document):
    artist = StringField()
    photo = ListField(FileField())

#my_painting = Painting(artist='Steve')
my_painting = Painting(id='5199faae8774a70398054183')

files = []
f = open('C:/Diagrama_MMCM.png', 'r')
mf = mongoengine.fields.GridFSProxy()
mf.put(f, filename=f.name)
files.append(mf)
my_painting.photo = files
my_painting.save()

Só que ele não está a inserir no mesmo registo, está a criar outro...
Reply all
Reply to author
Forward
0 new messages