【问题标题】:How to filter data in categories using django如何使用 django 过滤类别中的数据
【发布时间】:2020-07-09 03:13:44
【问题描述】:

我一直在从事一个非常类似于 hoop 的 django 项目,在该项目中,用户可以使用 snapchat 个人资料搜索朋友。 Hoop 按地区过滤用户,例如在使用应用程序之前,用户必须选择用户现在所在的地区,以便稍后为在该地区搜索朋友的人显示该个人资料,该应用程序还要求用户选择用户所在的地区用户想要搜索新朋友。

我想做同样的过滤,但不是过滤区域,而是按类别过滤。目前我的代码只向所有用户显示配置文件,但我已经开始创建 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 %}

【问题讨论】:

  • 这行得通吗,Mates.objects.filter(categories='action')

标签: python django django-models django-forms django-views


【解决方案1】:

由于您使用数字进行选择,因此您可以这样做:

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)

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

【讨论】:

  • 是的,因为您只需要特定类别的用户,而不是全部。
  • 代码在伙伴视图中的外观如何?因为我需要在那里添加 2 个问题,例如“您的个人资料属于什么类别”和“您在搜索什么”
  • 我没有正确理解您的问题。能不能说的详细点?
  • 是的!好吧,我的意思是伙伴视图用于上传用户的个人资料,对吗?还应该有 2 个问题(在我的代码中还没有),用户必须回答用户个人资料所属的类别以及用户正在搜索的类别,最后在这两个问题中用户必须在操作和运动的。清楚吗?
  • 基本上你想要一个用户可以选择要选择的类别的表单。如果是这种情况,只需在您的 MateForm 字段中添加类别。这将创建一个下拉列表,用户可以在其中选择他想要的类别
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 2015-11-10
  • 1970-01-01
  • 2011-10-11
  • 2021-11-15
  • 2020-02-08
  • 2013-01-12
  • 2021-12-08
相关资源
最近更新 更多