Как я могу получить данные от указанного c пользователя django python - PullRequest
1 голос
/ 01 марта 2020

Ошибка IntegrityError в / add-media / UNIQUE: сбой ограничения users_media.user_idUNIQUE: users_media.user_id Ошибка UNIQUE: users_media.user_id

Я пытаюсь получить данные от указанного пользователя c, но вместо этого я получаю все данные от всех пользователей в базе данных.

views.py

@login_required
def profile(request):

    if request.method == 'GET':        
        media_images = Media.objects.all()

    context = {
        'media_images':media_images,  

    }
    return render(request, 'users/profile.html', context)

@login_required
def add_media(request):

    if request.method == 'POST':
        form = MediaForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.user= request.user

            form.save()
            return redirect('http://127.0.0.1:8000/')
    else:
        form = MediaForm()

    return render(request, 'users/add_media.html', {'form':form})

models.py

class Media(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    image_name = models.CharField(max_length=50)
    image_description = models.CharField(max_length=80)
    image_image = models.ImageField(upload_to='media', default='default.jpg')

    def __str__(self):
        return f'{self.user.username} Media'

template

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section container">
      <div class="row justify-content-md-between ml-4 align-items-center ">
        <div class='col-md-'>
          <img width='100' src="{{user.profile.image.url}}" alt=""><span class='ml-4'>{{ user.username }}</span>
        </div>
        <div class='mr-4'>
          <a class='mr-4' href="{% url 'add-media'%}">Add media</a>
          <a href="#">Settings</a>
        </div>
      </div>
    </div>
    <div class="content-section">
      <h2 class='center'>Your Medias</h2>
          {% for media in media_images %}
            <div class="profile-content-and-manage">
              <div class="profile-content-div">
                  <p class='profile-paragraph-image paragraph-image-name'>{{media.image_name}}</p>
                  <p class='profile-paragraph-image paragraph-image-description'>{{media.image_description}} </p>
                  <img  height="97px" class='profile-image' src='{{media.image_image.url}}'>
              </div>
              <div class="profile-manage-div">

                <p class="profile-paragraph-image profile-paragraph-image-delete">X</p> <span class="profile-paragraph-image">Edit</span>
              </div>
            </div>
          {% endfor %}             

    </div>
{% endblock content %}

forms.py

class MediaForm(forms.ModelForm):

    class Meta:
        model = Media
        fields = ['image_name', 'image_description', 'image_image']

signal.py

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile


@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()

1 Ответ

0 голосов
/ 01 марта 2020

Вы фильтруете файлы так, что user ссылается на request.user:

@login_required
def profile(request):
    media_images = Media.objects<b>.filter(user=request.user)</b>
    context = {
        'media_images':media_images,  
    }
    return render(request, 'users/profile.html', context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...