首页 > 解决方案 > 将上传的文件连接到 Django 中的帖子

问题描述

我正在尝试将上传的文档与 Django 中的相关帖子连接起来。这个想法是,当用户创建一个帖子(我在我的代码中将其称为种子)时,如果他愿意,他可以上传一个文档。我尝试使用联合方法这样做,但它不起作用(告诉我它需要一个“str”而不是一个“int”,或者告诉我 ForeignKey 条件不起作用)。有什么办法可以连接这两个类,并成功上传文件?感谢您的任何帮助!!

这是我尝试过的:

视图.py

"""

def seed_create(request):
    if request.method == "POST":
        seed_form = SeedForm(request.POST)
        docu_form = DocumentForm(request.POST, request.FILES)
        if seed_form.is_valid() and docu_form.is_valid():
            seed_form.instance.user = request.user
            docu_form.save()
            seed_form.save()
            messages.success(request, 'Your seed was successfully created!')
            return redirect('seed:view_seed')
        else:
            messages.error(request, 'Please correct the error below.')
    
    else:
        seed_form = SeedForm(request.POST)
        docu_form = DocumentForm(request.POST, request.FILES)
    return render(request, "seed/create.html", context={"seed_form": seed_form, "docu_form": docu_form})

    

"""

模型.py

"""

def gallery_folder(instance, file):
    return '/'.join(['documents', instance.seed_related_id, file])

class Document(models.Model):
    seed_related = models.ForeignKey(Seed,on_delete=models.CASCADE,default=1)
    description = models.CharField(max_length=255, blank=True)
    file = models.FileField(default="No file",upload_to=gallery_folder)
    uploaded_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

"""

表格.py

"""

class DocumentForm(forms.ModelForm):
    class Meta:
        model = Document
        fields = ('description', 'file')

"""

标签: pythondjangoforeign-keys

解决方案


您需要通过以下表单将 链接seed_relatedSeed您构建的:

def seed_create(request):
    if request.method == 'POST':
        seed_form = SeedForm(request.POST, request.FILES)
        docu_form = DocumentForm(request.POST, request.FILES)
        if seed_form.is_valid() and docu_form.is_valid():
            seed_form.instance.user = request.user
            seed = seed_form.save()
            docu_form.instance.seed_related = seed
            docu_form.save()
            messages.success(request, 'Your seed was successfully created!')
            return redirect('seed:view_seed')
        else:
            messages.error(request, 'Please correct the error below.')
    
    else:
        seed_form = SeedForm()
        docu_form = DocumentForm()
    return render(
        request,
        'seed/create.html',
        context={'seed_form': seed_form, 'docu_form': docu_form}
    )

推荐阅读