Как я могу сохранить некоторую информацию, полученную в представлениях, в одно из полей модели - django
вот мой 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',]
Сначала занесите Classy CBVs в список закладок вашего браузера...
Предполагаю, что вы хотите использовать форму, либо для получения другой информации от пользователя, либо для того, чтобы позволить пользователю отменить автоматически определенное значение устройства. В этом случае вы хотите передать его в качестве начального значения устройства в форму
Теперь посмотрите на CreateView, чтобы понять, что нужно подклассифицировать. get_initial()
выглядит обнадеживающе, так что
def get_initial(self):
initial = super().get_initial()
initial['device'] = self.device_type # as per the comment!
return initial
Теперь вы должны увидеть форму с автоматически определенным значением в качестве значения по умолчанию
Если бы целью было получить от пользователя другие поля модели и всегда принудительно вставлять автоматически определенный тип устройства, то вместо этого вы бы подкласс form_valid
def form_valid(form):
obj = form.save( commit=False)
obj.device = self.device_type
obj.save()