将对象主键从其视图传递到ManyToMany关系对象视图

时间:2017-07-17 06:02:32

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

我不知道标题是否清楚。我很难以简单的方式解释它,因为问题并不那么简单,而且我不是一个非常优秀的说英语的人。我们欢迎任何提高头衔的建议。

所以,让我们回到实际问题......在我的应用程序中,人们可以加入不同的群体。目前,我正在为此目的创建邀请系统,因此用户可以向其他用户发送邀请。在组视图中,我有一个与该组无关的用户列表,允许组成员邀请这些人。所以,当我进入群组视图时,我正在传递它的主键。要创建关于邀请的数据库单元,我还需要一个组的PK和用户PK(我想用另一个视图来做,但我不确定它是最好的解决方案)。

我的问题是:如何将这两个PK传递到新视图,我将在数据库中创建组用户关系单元格?

models.py

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    var dictOfSelectedsCells : [Int:String?] = [:]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        tableView.delegate = self
        tableView.dataSource = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

extension ViewController : UITableViewDelegate,UITableViewDataSource
{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return ButtonTableViewCell.cellHeigth
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if let cell = tableView.dequeueReusableCell(withIdentifier: "ButtonTableViewCell", for: indexPath) as? ButtonTableViewCell
        {
            cell.selectionStyle = .none
            var selectedText : String?
            if let currentSelectedText = self.dictOfSelectedsCells[indexPath.row]
            {
                selectedText = currentSelectedText
            }

            cell.setupWithClosure(texts:["Variant1","Variant2","Variant3","Variant4"], textSelected: selectedText, closure: { [weak self] (selected) in
                debugPrint(indexPath)
                self?.dictOfSelectedsCells[indexPath.row] = selected
                tableView.reloadRows(at: [indexPath], with: .none)
            })

            return cell
        }
        assert(false, "this must not happen")
    }
}

views.py

class Group(models.Model):
    name = models.CharField(max_length=500)
    members = models.ManyToManyField(User, blank=True, related_name="member")
    invitations = models.ManyToManyField(User, blank=True, related_name="invitations")

urls.py

def not_yet_members_list_view(request, pk):
    group = Group.objects.get(pk=pk)

    not_yet_members = User.objects.all() #doesn't matter

    args = {'group': group, 'not_yet_members': not_yet_members}
    return render(request, 'groups/show_members.html', args)

# Here is my problem (this code is a simplified version of what I want to achieve)
def invite_user_view(request, group_pk, user_pk):
    invite_user(group_pk, user_pk)

    return render(request, 'groups/show_members.html')

template.html

url(r'^not_yet_members_list/(?P<pk>\d+)/$', views.not_yet_members_list, name='not_yet_members_list'),

1 个答案:

答案 0 :(得分:0)

在您需要传递组和用户的视图中

request.session['group_pk'] = group_pk
request.session['user_pk']= user_pk

在您需要访问数据的视图中

group_pk =  request.session['group_pk']
user_pk = request.session['user_pk']

然后

invite_user(group_pk, user_pk)

成功发送邀请后

del request.session['group_pk']
del request.session['user_pk']
request.session.modified = True