如何将我在视图中获得的一些信息保存到模型中的一个字段中 - django

Posted

技术标签:

【中文标题】如何将我在视图中获得的一些信息保存到模型中的一个字段中 - django【英文标题】:how can i save some information that i got in views to one of fields in models - django 【发布时间】:2022-01-22 05:31:05 【问题描述】:

这是我的views.py: 我想在模型的设备字段中保存类型

class GetDeviceMixin( object):
    def setup(self, request, *args, **kwargs):
        super().setup( request, *args, **kwargs)
        type= request.META['HTTP_USER_AGENT']
        print(type)
        return type


class RegisterView(GetDeviceMixin , generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy("register")
    template_name = "man/man.html"

这是我的models.py

class account(AbstractBaseUser):
    first_name= models.CharField(max_length=20,verbose_name="first name")
    device = models.CharField(verbose_name="device" , max_length=100)

这是我的forms.py:

class GetReq(forms.ModelForm):
    class Meta:
        model = account
        fields = ['device',]

【问题讨论】:

不要使用type作为变量,因为它的名字是python中定义的函数,你的代码会覆盖它。请改用 _typedevice_type 或其他名称。 【参考方案1】:

首先,将Classy CBVs 弹出到您的浏览器书签列表中...

我假设您想使用一个表单,或者从用户那里获取其他信息,或者允许用户覆盖自动确定的 device.value 值。在这种情况下,您希望将其作为设备的初始值传递给表单

现在,看看 CreateView 来确定要子类化什么。 get_initial() 看起来很有希望,所以

def get_initial(self):
    initial = super().get_initial()
    initial['device'] = self.device_type # as per the comment!
    return initial 

您现在应该会看到一个将自动确定的值作为默认值的表单

如果意图是从用户那里获取模型的 other 字段并始终强制插入自动确定的 device_type,则改为子类化 form_valid

def form_valid(form):
    obj = form.save( commit=False)
    obj.device = self.device_type
    obj.save()

【讨论】:

以上是关于如何将我在视图中获得的一些信息保存到模型中的一个字段中 - django的主要内容,如果未能解决你的问题,请参考以下文章

如何将我在表单上填写的信息从一个活动保存到另一个活动并在我的 Android 程序中显示多次尝试? [关闭]

将值从模型传递到 CI 中的视图

为啥 Python 不使用对象 .save() 将我的模型保存到数据库?

当我在另一个视图中使用 CoreData 保存新数据时如何更新模型的另一个实例

如何将 ASP.NET 视图模型中的 JSON 保存到 JavaScript 变量中?

如何按保存顺序对表格视图中的数据进行排序?