如何预先填充来自两个不同Profile实例的数据的单个表单?

时间:2017-11-17 10:09:43

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

我有一个模型Pair和另一个模型Profile

模型Pair的实例将使用从两个不同Profile实例中提取的表单。那么,如何使用两个配置文件中的一些信息预先填充单个表单?

两种模式:Profile& Pair

class Profile(models.Model):
    ...
    favorites = models.CharField(max_length=150)

class Pair(models.Model):
    requester = models.ForeignKey(Profile)
    accepter = models.ForeignKey(Profile)
    requester_favorite = models.CharField(max_length=50)
    accepter_favorite = models.CharField(max_length=50)

目前的表格:

class PairRequestForm(forms.Form):
    your_favorites = forms.CharField(max_length=50)
    partners_favorites = forms.CharField(max_length=50)

代码说明:它的工作方式是,用户(requester)将请求启动与PairRequestForm对潜在accepter的货币对。
表格应预先填入"最喜欢的"每个用户 我不确定如何连接views.py,因为我需要获取两个对象。

class PairRequestView(FormView):
    form_class = PairRequestForm
    template_name = 'profile/pair_request.html'
    success_url = "/"

    def is_valid(self, form):
        return  

注意:必须使用Profile中的当前信息预先填充配对表单。但是,表单不会更新任何旧信息(不会save()任何Profile s) - 它只会创建一个新的Pair实例。

1 个答案:

答案 0 :(得分:1)

假设在4.4.2之类的地方访问了接受者页面,您可以像往常一样从网址捕获接受者的ID。

一些事情 - 您不需要将收藏夹保存到配对模型中,因为对于/profiles/2模型的任何使用,您只需通过执行

即可访问它们。
Pair

如果你,提议者,id = 1,并访问我的,接受者的页面(id = 2),那么你可以填写表格 - (我已经很长时间了清楚的方式)

`p = Pair.objects.get(id=1) #or whatever query
 p.requester.favourites
 > Some of my favourites 
 p.accepter.favourites 
 > Some of your favourites. 

accepterobj = Profile.objects.get(id=id_from_url_for_page) proposerobj = Profile.objects.get(id=request.user.id) form = PairRequestForm(accepter=accepterobj, proposer=proposerobj, accepter_favourites=accepterobj.favourites, proposerobj_favourites=proposerobj.favourites) 的CBV,you can do the queries above by overriding the get_initial方法中。

PairRequestView