MultipleObjectsReturned показ при отправке формы - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть модель с FileField, когда я отправляю форму для загрузки изображений, которую она отправляет в первый раз. Но когда я хочу загрузить другое изображение, я получаю эту ошибку: get () вернул более одного изображения - он вернул 2!

class Image(models.Model):
    imageuploader_profile = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, null=True, blank=True)
    first_upload_image = models.FileField(upload_to ='pictsagram/',null=True)
    second_upload_image = models.FileField(upload_to ='pictsagram/',null=True)

def home(request):
    all_images = Image.objects.filter(imageuploader_profile=request.user.id)
    try:
        upload_images = Image.objects.get(imageuploader_profile=request.user.id)
    except Image.DoesNotExist:
        upload_images = None

    all_users = Profile.objects.all()
    next = request.GET.get('next')
    if next: return redirect(next)
    context = {
        'all_images': all_images,
        'all_users': all_users,
        'upload_images': upload_images,
    }
    return render(request,'home.html', context,)

def upload(request):
    form = PostForm(request.POST,request.FILES)
    if request.method == "POST":
        print(request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.imageuploader_profile = request.user
            post.save()
            return redirect('/')
    else:
        form = PostForm()
    return render(request, 'upload.html', {"form": form})

{% if upload_images.first_upload_image %}
      <img src="{{ upload_images.first_upload_image.url }}" class="img-fluid d-block w-100" alt="orange tree" />
      {% endif %}
{% if upload_images.second_upload_image %}
          <img src="{{ upload_images.second_upload_image.url }}" class="img-fluid d-block w-100" alt="orange tree" />
          {% endif %}

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Если вы используете modelname.objects.get("field_name"="**"), он всегда даст вам один объект, который соответствует вашему запросу. Если ваша база данных содержит более одного объекта, соответствующего вашему запросу, вы должны использовать filter

modelname.objects.filter("field_name"="**")
0 голосов
/ 09 февраля 2020

Это происходит потому, что каждый раз, когда вы отправляете форму, вы записываете новую запись в базу данных вместо обновления текущей.

Предполагая, что imageuploader_profile может иметь только одну строку в таблице

def upload(request):

    upload_images = Image.objects.filter(imageuploader_profile=request.user.id).first()

    form = PostForm(instance=upload_images)

    if request.method == "POST":

        form = PostForm(request.POST, request.FILES, instance=upload_images)

        if form.is_valid():
            post = form.save(commit=False)
            post.imageuploader_profile = request.user
            post.save()
            return redirect('/')

    return render(request, 'upload.html', {"form": form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...