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

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

models.py

CATEGORY_CHOICES = (             #I think this choices can help for the filter
    ('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)   #I also think this field will help.
    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']

сопряжения. 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 %}
                        {{form_mates.as_p}}
                    </form>
                </div>
            </div>
        </div>
    {% elif content.user == user %}
        I have my dynamic data output here
    {% endif %}
{% endfor %}

Любые вопросы пишите в комментариях.

1 Ответ

0 голосов
/ 09 июля 2020

Если вы хотите выполнить фильтрацию по полю модели, вы можете использовать .filter(). Подробнее об этом здесь .

В представлении это будет выглядеть примерно так:

from .models import Mates

def show_mates(request):
    # depending on how you want to get the category
    category = ''

    mates_for_category = Mates.objects.filter(categories=category)

    context = {
        "mates": mates_for_category
    }

    return render(request, template_name='mates_for_category.html', context=context)

Из вашего вопроса я не понимаю, как вы хотите, чтобы пользователь чтобы иметь возможность фильтровать по категории, поэтому я не указывал это в этом примере.

...