创新实训记录9--Django一个表单对应多个按钮解决方案/acm数据处理

Django一个表单对应多个按钮解决方案

需求:
在django中,有时候我们需要在一个表单中设置多个按钮实现不同的功能。

解决方法:
为不同按钮添加不同name属性,然后再后台判断name值。例如:

 <form class="form-horizontal" role="form"   method="POST" action="{% url 'choose_paper:setPaper' %}">
                                {% csrf_token %}
                                        <div class="form-group">
                                            <div class="col-sm-2 col-lg-offset-1">
                                                <p>年份</p>
                                                <input type="text" id="date" name="datetimepicker" value=" "
                                                    placeholder="选择年份" class="form-control">
                                            </div>
                                        
                                            <div class="col-sm-2 col-lg-offset-1">
                                                <p>会议</p>
                                                <div class="form-group">
                                                    <input type="text" name="venue" class="form-control">
                                                </div>
                                            </div>
                                        </div>
                                            <div class="col-sm-offset-2 col-sm-3">
                                                <button type="button submit" class="btn btn-info btn-lg btn-block" name="paper_set">
                                                    详情</button>
                                            </div>

然后通过不同的name实现不同功能

def function(request):  # 根据会议和年份筛选数据集合
    if request.POST:
        if  'paper_set' in request.POST:
            year = request.POST['datetimepicker']
            venue = request.POST['venue']
            context = {
                'year': year,
                'venue': venue
            }
        else:
            context={
                'year': "",
                'venue': ""
            }

    return render(request, 'choose_paper/setpaper.html', context)

参考:

https://blog.csdn.net/destinymf/article/details/81135131

数据处理(论文id/论文year/论文venue 形式):

在这里插入图片描述
代码:

#用来生成id year venue 文件
with open('./articles.txt', 'r', encoding='utf-8') as f1:
        with open('./years.txt', 'r', encoding='utf-8') as f2:
            with open('./venues.txt', 'r', encoding="ISO-8859-1") as f3:
                ids=f1.readlines()
                years=f2.readlines()
                venues=f3.readlines()
                with open('./id_year_venue.txt', 'a', encoding='utf-8') as f4:
                    for i in range(len(ids)):
                        f4.write(ids[i])
                        f4.write(years[i])
                        f4.write(venues[i])
                        f4.write("\n")

获取满足条件的(年份&会议)的论文集合(id):

在这里插入图片描述
简单的输出:
在这里插入图片描述
代码:

 if  'paper_set' in request.POST:
            year = request.POST['datetimepicker']
            venue = request.POST['venue']
            articals=""
            with open("choose_paper/data/id_year_venue.txt",'r',encoding='utf-8') as f:
                lines=f.readlines()
                i=0
                while i< len(lines)-3:
                    a=lines[i].strip()
                    b=lines[i+1].strip()
                    c=lines[i+2].strip()
                    if(b==year and c==venue):
                        articals+=a
                        articals+=" "
                    i+=4
            context = {
                'articles':articals#获取满足年份,会议的论文id
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Django中,可以使用select_related()方法一次性查询多个记录对应的外键数据。这样可以避免N+1查询问题,提高查询效率。 例如,如果有一个主表为Book,外键为Author,可以这样查询: books = Book.objects.all().select_related('author') 这样books变量中的每一个Book对象都会有一个author属性,通过这个属性可以访问对应的Author对象。 ### 回答2: 在Django中,如果要同时查询主表对应的外键数据,可以使用select_related方法。select_related方法可以在一次数据库查询中同时获取主表和外键数据。 例如,假设有一个主表Post和外键表Comment,每个Post都有多个对应的Comment,想要同时获取每个Post对应的所有Comment。 可以通过如下代码实现: posts = Post.objects.select_related('comment_set') for post in posts: print(f"Post标题:{post.title}") for comment in post.comment_set.all(): print(f"评论:{comment.content}") 在上述代码中,使用select_related('comment_set')来告诉Django在查询Post时同时获取其关联的Comment数据。然后通过post.comment_set.all()来获取每个Post对应的所有Comment。 使用select_related方法可以减少数据库查询的次数,提高查询效率。但需要注意,如果外键关联的表数据较多,使用select_related可能会导致查询语句过于庞大,建议适量使用。 ### 回答3: 在Django中,可以使用多种方式同时查询主表对应的外键数据。 一种常见的方法是使用`select_related()`函数,它可以在查询主表数据的同时同时查询外键数据。例如,假设有一个主表`User`和外键表`Profile`,可以通过以下代码同时查询两个表的数据: ``` users = User.objects.select_related('profile').all() for user in users: print(user.profile) ``` 这样就可以通过`user.profile`属性获取到每个用户对应的外键数据。 另外一种方法是通过反向查询外键数据。在模型类中,可以设置`related_name`属性来定义反向查询的名称。例如,如果在主表中设置了`profile = models.ForeignKey(Profile, related_name='users')`,则可以通过以下代码同时查询主表和外键表的数据: ``` profiles = Profile.objects.all() for profile in profiles: print(profile.users.all()) ``` 这样就可以通过`profile.users.all()`获取到每个外键数据对应的主表数据。 需要注意的是,以上方法都会在查询数据时产生额外的SQL查询,因此在进行大量数据查询时可能会影响性能。如果需要在一个查询中获取所有的主表和外键数据,可以考虑使用`prefetch_related()`函数来优化查询性能。 总之,以上是在Django中同时查询主表对应的外键数据的几种常见方法。根据实际需求和数据量大小,可以选择合适的方法来进行查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值