我很难用我的功能共享帖子,我的挑战是每当我共享帖子时,原始帖子中的共享图像不会将图像发布到新的帖子图像字段,而是将图像转发到原始共享帖子字段,因此无法显示共享图像!我的问题是,为什么我的帖子被转发到原始图片字段,而不是新的共享帖子字段!希望找到解决方案?
Here is my function for sharing post:
def share_post(request, pk):
original_post = Post.objects.prefetch_related('groupimage_set').get(pk=pk)
form = ShareForm(request.POST, request.FILES)
if form.is_valid():
new_post = Post(
shared_body = request.POST.get('description'),
description = original_post.description,
username = original_post.username,
date_posted = original_post.date_posted,
group = original_post.group,
video = original_post.video,
shared_on = datetime.now(),
shared_user = request.user)
new_post.save()
form = GroupImageForm(request.POST, request.FILES)
if form.is_valid():
new_post = form.save(commit=False)
for image in original_post.groupimage_set.all():
new_post = GroupImage(post=original_post,
group=original_post.group,
shared_user=request.user,
image=image.image)
new_post.save()
return redirect('group:main',original_post.group.pk)
else:
form = GroupImageForm(request.POST, request.FILES)
ctx = {'form':form, 'original_post':original_post}
return render(request,'group/share_form.html', ctx)
这是我的图像和后模型
class Post(models.Model):
group = models.ForeignKey(GroupEx, on_delete=models.CASCADE, related_name="group_post")
username = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE ,related_name="group_user")
description = models.TextField(max_length=500, blank=True)
video = models.FileField(upload_to="group_videos", blank=True)
shared_body = models.TextField(blank=True, null=True)
date_posted = models.DateTimeField(auto_now_add=True)
shared_on = models.DateTimeField(blank=True, null=True)
shared_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True, related_name='+')
群组图像模型
class GroupImage(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
group = models.ForeignKey(GroupEx,on_delete=models.SET_NULL, null=True)
shared_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True, related_name='+')
image = models.ImageField(upload_to='GroupImageLibrary/', blank=True, null=True)
错误是将original_post
传递给GroupImage model
而不是new_post
尝试更改此部件
if form.is_valid():
new_post = Post(
shared_body = request.POST.get('description'),
description = original_post.description,
username = original_post.username,
date_posted = original_post.date_posted,
group = original_post.group,
video = original_post.video,
shared_on = datetime.now(),
shared_user = request.user)
new_post.save()
form = GroupImageForm(request.POST, request.FILES)
if form.is_valid():
new_post = form.save(commit=False)
for image in original_post.groupimage_set.all():
new_post = GroupImage(post=original_post,
group=original_post.group,
shared_user=request.user,
image=image.image)
new_post.save()
至
if form.is_valid():
new_post1 = Post(
shared_body = request.POST.get('description'),
description = original_post.description,
username = original_post.username,
date_posted = original_post.date_posted,
group = original_post.group,
video = original_post.video,
shared_on = datetime.now(),
shared_user = request.user)
new_post1.save()
for image in original_post.groupimage_set.all():
new_post = GroupImage(post=new_post1,
group=original_post.group,
shared_user=request.user,
image=image.image)
new_post.save()
print("new_post",new_post) # just for debugging the program...
我认为你处理分享帖子的另一种方法是在帖子上加一个外键。如果你需要更多帮助,请告诉我。