【问题标题】:I want to pass values are gotten in views.py to forms.py我想将views.py中的值传递给forms.py
【发布时间】:2018-09-26 05:50:07
【问题描述】:

我想将views.py中的值传递给forms.py. 我写在views.py

def app(request):

    if request.method == "POST":
        form = InputForm(data=request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            age = form.cleaned_data['age']

在forms.py中

class InputForm(forms.Form):
    name = forms.CharField(max_length=100)
    age = forms.CharField(max_length=100)

def logic(self):
   #I want to use views.py’s name&age’s value here

我是 Django 新手,我应该如何编写代码来完成我的理想?

【问题讨论】:

  • @MaëlPedretti 我阅读了 QA,但我不明白我应该如何编写代码......
  • 你的python级别是多少?您只需在表单类中创建两个属性并将它们设置在form.is_valid() 之后
  • @MaëlPedretti 我有点初学者。你能在答案中写下你的评论代码吗?我无法清楚地听到你的评论

标签: python django


【解决方案1】:

实际上您可以通过cleaned_data 属性(即dict 对象)访问表单中的数据,例如此处签出save 方法:

class CreatePostFrom(forms.Form):
    image = forms.ImageField(required=True)
    des = forms.CharField(required=False, max_length=250)
    location = forms.CharField(required=False, max_length=100)
    tags = forms.CharField(required=False, max_length=250)

    def save(self, user):
        tags = self.cleaned_data["tags"].split()
        for tag in tags:
            Tag.objects.get_or_create(name=tag)
        post = Post.objects.create(user=user,
                                   image=self.cleaned_data["image"],
                                   des=self.cleaned_data["des"],
                                   location=self.cleaned_data["location"])
        post.tags.add(*tags)
        return post

【讨论】:

    【解决方案2】:

    正如我在评论中所说:

    在 Form 类中使用变量。

    class InputForm(forms.Form):
        name = forms.CharField(max_length=100)
        name_data = ""
        age = forms.CharField(max_length=100)
        age_date = 0
    
        def logic(self):
            # I want to use views.py’s name&age’s value here
            # You can play here with your age_data and name_data
    

    还有views.py:

    def app(request):
    
    if request.method == "POST":
        form = InputForm(data=request.POST)
        if form.is_valid():
            form.name_data = form.cleaned_data['name']
            age.name_data = form.cleaned_data['age']
    

    编辑(我需要一杯咖啡,抱歉..)

    我刚刚看到您的cleaned_data 来自您的表单,所以为什么不在表单类中直接使用它:

    class InputForm(forms.Form):
        name = forms.CharField(max_length=100)
        age = forms.CharField(max_length=100)
    
        def logic(self):
            # I want to use views.py’s name&age’s value here
            # Why don't you use cleaned_data['name'] and age from here?
            name = cleaned_data['name']
    

    并保持你的观点像这样。

    def app(request):
    
    if request.method == "POST":
        form = InputForm(data=request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            age = form.cleaned_data['age']
    

    不确定这是否能 100% 正常工作

    但是这个答案的目的不是给你确切的解决方案,而是让你对你的问题进行一些试验。作为 Python 初学者,如果您自己尝试并进行一些研究,您将了解更多信息。

    还可以考虑阅读以下内容:https://docs.djangoproject.com/en/2.1/topics/forms/#building-a-form-in-django

    【讨论】:

    • 谢谢您的回答!!在编辑中,我如何在逻辑方法中使用cleaned_data['name'] 和年龄?在这一点上我无法清楚地理解......
    • 只需像使用另一个变量一样使用cleaned_data['name']。示例:name = cleaned_data['name']
    猜你喜欢
    • 2019-09-21
    • 2017-07-14
    • 2017-12-22
    • 2020-01-25
    • 1970-01-01
    • 2016-03-12
    • 2014-01-13
    • 2012-04-07
    相关资源
    最近更新 更多