Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用django筛选类别中的数据_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python 如何使用django筛选类别中的数据

Python 如何使用django筛选类别中的数据,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我一直在从事一个与hoop非常相似的django项目,在该项目中,用户可以使用snapchat配置文件搜索朋友。Hoop按区域过滤用户。例如,在使用应用程序之前,用户必须选择用户当前所在的区域,以便稍后为在该区域搜索朋友的用户显示该个人资料,同时应用程序要求用户选择用户希望搜索新朋友的区域 我想做同样的过滤,但不是过滤区域,而是按类别过滤。目前我的代码只是向所有用户显示配置文件,但我已经开始创建两个类别,即“动作”和“运动”,但我不知道如何处理过滤 模型 CATEGORY_CHOICES = (

我一直在从事一个与hoop非常相似的django项目,在该项目中,用户可以使用snapchat配置文件搜索朋友。Hoop按区域过滤用户。例如,在使用应用程序之前,用户必须选择用户当前所在的区域,以便稍后为在该区域搜索朋友的用户显示该个人资料,同时应用程序要求用户选择用户希望搜索新朋友的区域

我想做同样的过滤,但不是过滤区域,而是按类别过滤。目前我的代码只是向所有用户显示配置文件,但我已经开始创建两个类别,即“动作”和“运动”,但我不知道如何处理过滤

模型

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的格式)

{%用于contents%中的内容}
{%if不是content.user==user%}
{%csrf_令牌%}
提交
{%endif%}
{%endfor%}

由于您使用数字进行选择,您可以执行以下操作:

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)

通过这种方式,如果您使用动作上下文,您将获得与动作类别等相关的所有用户的运动类别。

这是否有效,
Mates.objects.filter(categories='action')
?是的,因为您只需要特定类别的用户,而不需要所有用户。Mates视图中的代码会是什么样子?因为我需要在那里添加两个问题,比如“你的个人资料属于什么类别”和“你在搜索什么”,我没有正确地理解你的问题。你能再详细一点吗?是的!我的意思是mates视图是用来上传用户的个人资料的,对吗?还应该有两个问题(我的代码中还没有),用户必须回答用户档案所属的类别和用户搜索的类别,最后在这两个问题中,用户必须在动作和运动之间进行选择。明白了吗?基本上你需要一个表单,用户可以在其中选择要选择的类别。如果是这种情况,只需在MateForm字段中添加类别。这将创建一个下拉列表,用户可以在其中选择他想要的类别
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)