Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 创建对象B时,使用对象B的外键创建对象A_Django_Python 3.x_Django Views - Fatal编程技术网

Django 创建对象B时,使用对象B的外键创建对象A

Django 创建对象B时,使用对象B的外键创建对象A,django,python-3.x,django-views,Django,Python 3.x,Django Views,在Django管理面板的文本编辑器中创建帖子时,我上传文件。我想通过外键将此文件与当前帖子链接。问题是这个帖子还没有创建,但我需要参考一下。 我的模型: class UploadFile(models.Model): upload_by = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE, related_name="uploaded_file_author") fil

在Django管理面板的文本编辑器中创建帖子时,我上传文件。我想通过外键将此文件与当前帖子链接。问题是这个帖子还没有创建,但我需要参考一下。 我的模型:

class UploadFile(models.Model):
    upload_by = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, on_delete=models.CASCADE, related_name="uploaded_file_author")
    file = models.FileField(null=True, blank=True, upload_to='files/%Y/%m/%d/',)
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="file_post")
我的看法是:

@require_POST
def file_upload(request):
    reqfile = UploadFile.objects.create(file=request.FILES['file'], upload_by=request.user, **post="need an object here")**
    return JsonResponse({'fileurl': reqfile.file.url})
我上传文件的ajax请求:

file_picker_callback: function(cb, value, meta) {
    if (meta.filetype == 'file') {
        var input = document.createElement('input');
        input.setAttribute('type', 'file');
        input.setAttribute('accept', 'MIME_type');

        input.onchange = function () {
            var file = this.files[0];
            var reader = new FileReader();

            // FormData
            var fd = new FormData();
            var files = file;
            fd.append("file",files);

            // AJAX
            jQuery.ajax({
                url: "/fileupload/file/",
                type: "POST",
                data: fd,
                dataType: 'json',
                contentType: false,
                processData: false,
                cache: false,
                async: true
            }).done(function(response){
                var location = response.fileurl;
                reader.onload = function(){
                    // call the callback and populate the Title field with the file name
                    cb(location, { download : files.name });
                };
                reader.readAsDataURL(files);
            });
        };
        input.click();
    }
}
我的admin.py:

from django.contrib import admin
from .models import Post, UploadMedia, UploadFile, UploadImage
from .forms import MyTextForm
# Register your models here.


class PostModelAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title", )}
    list_display = ["title", "updated", "created"]
    list_display_links = ["title"]
    list_filter = ["created", "tags"]
    search_fields = ["title", "content",]
    form = MyTextForm

    class Meta:
        model = Post

    class Media:
        js = ('//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js', 'js/csrf_setup.js',
              'js/tinymce/tinymce.js', 'js/init-tinymce.js',)


admin.site.register(Post, PostModelAdmin)

如果未创建帖子,但需要创建UploadFile实例,则可以将null=True添加到帖子字段

post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True, related_name="file_post")
创建post后,您可以通过以下方式将其链接到upload_文件实例:

upload_file.post = Post.objects.create(...)
upload_file.save()
要么创造

@require_POST
def file_upload(request):
    post = Post.objects.create(....)
    reqfile = UploadFile.objects.create(file=request.FILES['file'], upload_by=request.user, post=post)
    return JsonResponse({'fileurl': reqfile.file.url})
或者检索一个post实例并将其传递到该实例:

from django.shortcuts import get_object_or_404

@require_POST
def file_upload(request, pk):
    post = get_object_or_404(Post, pk=pk)
    reqfile = UploadFile.objects.create(file=request.FILES['file'], upload_by=request.user, post=post)
    return JsonResponse({'fileurl': reqfile.file.url})

如何通过Ajax请求传递pk参数。我使用Ajax请求上传文件。在带有模板标记的模板中,您可以这样做,例如:{{query.pk}这将给出传递给模板的实例的pk。数据:fd,这部分数据:{{query.pk}但不知道如何将实例传递给模板是的,事实是我创建的帖子不在单独的页面上,但是在Django管理页面上。我还不知道管理页面模板在哪里。我还没有这样的经验。我在问题的底部添加了我的Ajax查询。那么你打算在哪里找到你的Ajax呢?