Woo*_*Kim 1 django django-models django-views
我正在尝试更改我的模型。
现在,我使用其他模型为我的帖子保存图像。
我想大多数人都是这样使用的。
但是,如果数据库是 postgresql,我听说 django 支持 ArrayField。
import django.contrib.postgres.fields import ArrayField
Run Code Online (Sandbox Code Playgroud)
所以,我试图改变我的模型。如
class post(models.Model):
title = ...
content = ...
images = ArrayField(base_field=models.ImageField(...))
Run Code Online (Sandbox Code Playgroud)
我想知道的是如何在视图中创建这些 base_field 的数据? 如果模型是我们可以正常访问
class tmp(models.Model):
img = models.ImageField()
Run Code Online (Sandbox Code Playgroud)
在视图中,或在任何地方,我们只是喜欢
img = request.FILES['data']
tmp.save()
Run Code Online (Sandbox Code Playgroud)
这个。
然而,在ArrayField中,我想做的是
tmp_imgs = TemporaryImagesTable.objects.filter(user=user)
for tmp_img in tmp_imgs:
images.append(???????????????) (append or images = ?????)
Run Code Online (Sandbox Code Playgroud)
我想做的是
images.append(new ImageField(tmp_img))
Run Code Online (Sandbox Code Playgroud)
像这样!
请帮我,
我有一个和你一样的类似实现,最终在没有数组的情况下使用。
毫无疑问,PostgreSQL 支持的 ArrayField 在时间上是非常诱人的,这会影响您对如何使用它的判断。
ArrayField 最适合用于存储数据,例如帖子或产品的标签。如果您正在搜索特定标签或只是过滤,这可能很容易实现。
但是 ImageFields 不可搜索,或者以更好的方式未针对此类操作进行优化。我最终使用了两个表来解决这个问题:
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
Run Code Online (Sandbox Code Playgroud)
在 views.py 中,获取特定帖子的所有图像:
# 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
Run Code Online (Sandbox Code Playgroud)
如果您有兴趣了解更多信息,可以在此处找到有关transaction.atomic() 的更多信息。
像往常一样,这是一种方法,根据您的规范,必须有其他方法来做到这一点
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |