Как фильтровать данные по категориям, используя django - PullRequest
0 голосов
/ 09 июля 2020

Я работал над проектом django, очень похожим на h oop, в котором пользователь может искать друзей, используя профиль Snapchat. H oop фильтрует пользователей по регионам, например, перед использованием приложения, пользователь должен выбрать регион, в котором он находится прямо сейчас, чтобы позже показать этот профиль людям, ищущим друзей в этом регионе, также приложение просит пользователя выбрать регион, в котором пользователь хочет искать новых друзей.

Я хочу выполнить ту же фильтрацию, но вместо фильтрации региона я хочу фильтровать по категориям. В настоящее время мой код просто показывает профили для всех пользователей, но я начал создавать 2 категории: «действие» и «спорт», но я не знаю, как обрабатывать эту фильтрацию.

модели

CATEGORY_CHOICES = (
    ('action', 'action'),
    ('sports', 'sports'),
)

class Mates(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='usermates', unique=True)
    categories = models.CharField(choices=CATEGORY_CHOICES, default="choose...", max_length=10)
    req_bio = models.CharField(max_length=400)
    req_image = models.ImageField(upload_to='requestmates_pics', null=True, blank=True, default=False)

views.py

def matesmain(request):
    contents = Mates.objects.all()
    context = {
        'contents': contents,
        'form_mates': MatesForm(),
    }
    print("nice3")
    return render(request, 'mates.html', context)

def mates(request):
    if request.method == 'POST':
        form_mates = MatesForm(request.POST, request.FILES)
        if form_mates.is_valid():
            instance = form_mates.save(commit=False)
            instance.user = request.user
            instance.save()
            return redirect('mates-main')
            print('succesfully uploded')

    else:
        form_mates = MatesForm()
        print('didnt upload')
    return redirect('mates-main')

forms.py

class MatesForm(forms.ModelForm):
    class Meta:
        model = Mates
        fields = ('req_bio', 'req_image',)
        exclude = ['user']

mates. html (вот форма html)

{% for content in contents %}
    {% if not content.user == user %}
        <div class="mates-grid">
            <div class="mates-grid-1">
                <div class="mates-item">
                    <form action="{% url 'mates' %}" method="post" enctype="multipart/form-data">
                        {% csrf_token %}
                        <div class="form-item-img">
                            <input type="file" name="req_image" accept="image/*" id="id_req_image">
                         </div>
                         <div class="form-item-bio">
                             <input type="text" name="req_bio" maxlength="400" required="" id="id_req_bio">
                         </div>
                         <div class="form-item-button">
                             <button type="submit">Submit</button>
                         </div>
                     </form>
                 </div>                             
             </div>
         </div>
         {% endif %}
     {% endfor %}

1 Ответ

1 голос
/ 09 июля 2020

Поскольку вы используете числа для своего выбора, вы должны сделать это:

def matesmain(request):
    action = Mates.objects.filter(categories='action')
    sports = Mates.objects.filter(categories='sports')
    
    context = {
        'action' : action,
        'sports' : sports,
        
    }
    
    return render(request, 'mates.html', context)

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

...