2

ユーザーがDropzone.jsを使用して画像をアップロードできる Django プロジェクトに取り組んでいます。現時点では、ユーザーの画像は mypp/images フォルダーに保存されますが、アップロードされた画像のパスを動的に保存したいと考えています。例 /images//image1.jpg ところで、ユーザー登録とログインを処理するためにdjango-registraion-reduxパッケージ (v 1.1) を使用しています。これらは私のコードです:

models.py

from django.db import models
from django.contrib.auth.models import User

get_user_image_folder(instance, filename):
return "%s/%s" % (instance.user.user.username, filename)

class Picture(models.Model):
user = models.ForeignKey(User, null=True)
image = models.ImageField(upload_to=get_user_image_folder,)

foms.py

class PictureForm(forms.ModelForm):
class Meta:
    model = Picture
    fields = ('image',)

ビュー.py

def upload_picture(request):
if request.method == 'POST':
    form = PictureForm(request.POST, request.FILES)

    if form.is_valid():
        picture = form.save()
else:
    form = PictureForm()
return render(request, "upload_picture.html", locals())

テンプレート

  <body>
    <form action="{% url 'upload_picture' %}" class="dropzone" id="myDropzone" method='POST' enctype="multipart/form-data">
        {% csrf_token %}

        <div class="fallback">
            <input name="file" type="file" multiple />
        </div>
    </form>

    <script src="{% static 'dropzone/dropzone.js' %}"></script>
    <script type="text/javascript">
        Dropzone.options.myDropzone ={
            paramName: "image", // name of input
            autoProcessQueue : true,
            parallelUploads: 1,

            init :  function (){
                this.on( "success", function( file, responseText){
                    // event launched at the end of uploading images queued
                    console.log( responseText );
                });
            }
        };
    </script>
</body>

urls.py

urlpatterns = [url(r'^upload-picture/', 'myapp.views.upload_picture', name='upload_picture'),]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

設定.py

MEDIA_ROOT = 'C:/Users/mhsha/Desktop/board'
MEDIA_URL = '/media/'

今、画像をアップロードしようとすると、次のエラーが表示されます: AttributeError at /upload-picture/ 'Picture' object has no attribute 'user' 任意の提案をいただければ幸いです!

4

2 に答える 2

1

Models.py で:

あなたが持っている:instance.user.user.username。余分な .user があります。次のようになります。

def get_user_image_folder(instance, filename):
return 'images/{0}/{1}'.format(instance.user.username, filename)

class Picture(models.Model):
user = models.ForeignKey(User)
image = models.ImageField(upload_to = get_user_image_folder)

これはうまくいくはずです。

于 2016-04-12T09:05:46.650 に答える