2016-08-10 1 views
0

Ich versuche mein Modell zu ändern.Wie kann ich Bilder in Arrayfield mit postgresql/speichern?

Momentan verwende ich ein anderes Modell, um Bilder für meine Beiträge zu speichern.

Ich denke, die meisten Leute verwenden so.

Allerdings hörte ich Django unterstützt ArrayField, wenn Datenbank Postgresql ist.

import django.contrib.postgres.fields import ArrayField 

so, versuche ich mein Modell zu ändern. wie

class post(models.Model): 
    title = ... 
    content = ... 
    images = ArrayField(base_field=models.ImageField(...)) 

Was will ich wissen, ist, wie kann ich diese base_field Daten in Sicht erstellen? können wir normalerweise zugreifen, wenn Modell

class tmp(models.Model): 
    img = models.ImageField() 

in Sicht ist, oder wo auch immer, wir tun wie

img = request.FILES['data'] 
tmp.save() 

diesem.

Allerdings In ArrayField möchte ich tun

tmp_imgs = TemporaryImagesTable.objects.filter(user=user) 
for tmp_img in tmp_imgs: 
    images.append(???????????????) (append or images = ?????) 

ich tun möchte, ist

images.append(new ImageField(tmp_img)) 

like this!

bitte helfen Sie mir,

+0

Dies ist ein klassischer Fall von etwas zu brechen, indem Sie versuchen, etwas zu reparieren, das nicht kaputt ist. – e4c5

+0

hmm, natürlich stimme ich damit überein. Ich versuche nur eine Tabelle für Bilder zu reduzieren. Auch der Grund, warum ich das wissen möchte ist, dass was passiert, wenn ich dieses Problem nicht vermeiden kann. – 101110101100111111101101

+0

das ist nicht, wofür Arrayfeld entwickelt wurde.Ich empfehle das Lesen der Postgresql-Arrays documentaton – e4c5

Antwort

1

ich wie du gerade eine ähnliche Umsetzung hatte und endete ohne das Array zu verbrauchen.

Kein Zweifel, dass ArrayField von PostgreSQL unterstützt ist sehr verlockend zu der Zeit, die Ihre Beurteilung darüber, wie Sie es verwenden möchten.

ArrayField wird am besten verwendet, um Daten wie Tags für einen Post oder ein Produkt zu speichern. Das könnte einfach implementiert werden, wenn Sie nach einem bestimmten Tag suchen oder nur filtern.

Aber ImageFields sind nicht suchbar oder besser gesagt, es ist nicht für solche Operationen optimiert. Ich landete mit zwei Tabelle für das Problem:

class Post(models.Model): 
    author = # Character 
    place = # String 
    comment = # TextField 

class PostImages(models.Model): 
    post = models.ForeignKey(Post) 
    image = models.ImageField()# All the meta data requried for the field 

In views.py, die Bilder für eine bestimmte Stelle alle zu bekommen:

# To save the post and Images 
def save_images(request): 
    post_data = # get all the data for post object, 
       # either from form or as individual data  
    images = # Get images data from the request 

    # Using atomic transactions will save from writing any data to the 
    # Database unless all the operations have been performed without any error 
    with transaction.atomic(): 
     # Save the post data into a Post object in any manner 
     post_obj = Post.objects.save(**post_data) 
     # Saving all the multiple images 
     for each_image in images: 
      image_obj = PostImages() 
      image_obj.post = post_obj 
      image_obj.image = each_image 
      image_obj.save() 
     # Return success or do something here 


# To search or fetch images for post 
def get_post_images(post_pk): 
     post_obj = Post.objects.get(pk=post_pk) 
     post_images = PostImages(post=post_obj) 
     # Do something for both of them 

Hier können Sie mehr über transaction.atomic() finden, wenn Sie interessiert sind, um mehr darüber zu erfahren.

Wie immer ist dies eine der Art und Weise, es zu tun, muss es andere Möglichkeiten, es zu tun nach Ihren Vorgaben

+0

Danke für deine Hilfe, Alter! – 101110101100111111101101

+0

Kein Problem, froh, dass es geholfen hat – kt14

Verwandte Themen