2016-08-10 5 views
0

내 모델을 변경하려고합니다.어떻게 postgresql /로 Arrayfield에 이미지를 저장할 수 있습니까?

지금은 다른 모델을 사용하여 내 게시물의 이미지를 저장합니다.

나는 이런 식으로 대부분의 사람들이 사용한다고 생각합니다.

그러나 데이터베이스가 postgresql이면 django가 ArrayField를 지원한다고 들었습니다.

import django.contrib.postgres.fields import ArrayField 

그래서 모델을 변경하려고합니다. 같은

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

로 내가 알고 싶어 내가보기에이 base_field의 데이터를 생성 할 수 있습니다 어떻게? 모델

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

, 또는 어디에 경우 우리는 우리가

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

같이 할, 일반적으로 액세스 할 수 있습니다.

그러나 ArrayField에서, 내가 원하는 내가하고 싶은

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

것은

images.append(new ImageField(tmp_img)) 
이 같은

입니다!

제발 도와주세요,

+0

이 파손되지 뭔가를 해결하기 위해 노력에 의해 무언가를 파괴의 고전적인 사건에 따라 그것을 할 수있는 다른 방법이 있어야한다, 그것을 할 수있는 방법 중 하나입니다. – e4c5

+0

흠, 물론 그 점에 동의합니다. 그냥 이미지 용 테이블 하나를 줄이려고합니다. 또한 내가 이것을 알고 싶어하는 이유는이 문제에 직면하면 피할 수없는 것입니다. – 101110101100111111101101

+0

어레이 필드가 설계된 것이 아니기 때문입니다.postgresql 배열 문서 작업을 읽는 것이 좋습니다 – e4c5

답변

1

나는 당신과 비슷한 구현을 가지고 있으며 배열없이 사용하게되었습니다.

PostgreSQL에서 지원하는 ArrayField가 사용자의 판단을 흐리게하는 것은 의심의 여지가 없습니다.

ArrayField는 포스트 또는 제품 용 태그와 같은 데이터를 저장하는 데 가장 적합합니다. 특정 태그를 검색하거나 필터링하는 경우 쉽게 구현할 수 있습니다.

그러나 ImageField는 검색이 가능하지 않으며 더 나은 방법으로 처리 할 수 ​​없습니다. 당신이 관심이 있다면 여기에

# 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 

당신이 transaction.atomic()에 대한 자세한 내용을 확인할 수 있습니다

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 

views.py에서 특정 게시물에 대한 모든 이미지를 얻을 : 나는 문제에 대한 두 개의 테이블을 사용하여 종료 그것에 대해 더 알고 싶습니다.

처럼 항상이 귀하의 사양

+0

도움 주셔서 감사합니다. – 101110101100111111101101

+0

문제 없으니 도움이 되니 기쁩니다. – kt14

관련 문제