我試圖將表單數據保存到匿名用戶,但是當我嘗試在CreateView中保存某些表單數據時出現以下錯誤。「我不清楚問題是什麼?匿名用戶錯誤
ValueError: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x11126bc18>>": "EUser.user" must be a "User" instance.
型號:
class EUser(models.Model):
online_account = models.BooleanField()
supplier1 = models.OneToOneField(SupplierAccount)
supplier2 = models.OneToOneField(SupplierAccount)
supplier3 = models.OneToOneField(SupplierAccount)
address = models.OneToOneField(Address)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
class SupplierAccount(models.Model):
supplier = models.ForeignKey(Supplier)
username = models.CharField(max_length=255)
password = models.CharField(max_length=255)
形式:
class ServiceTypeForm(forms.ModelForm):
# BOOL_CHOICES = ((False, 'No'), (True, 'Yes'))
# online_account = forms.BooleanField(widget=forms.RadioSelect(choices=BOOL_CHOICES))
def __init__(self, *args, **kwargs):
super(ServiceTypeForm, self).__init__(*args, **kwargs)
self.fields['service_type'].initial = 'D'
class Meta:
model = EUser
fields = ('service_type', 'online_account')
查看:
class ServiceTypeView(CreateView):
form_class = ServiceTypeForm
template_name = "standard_form.html"
success_url = '/'
def form_valid(self, form):
form.instance.user = self.request.user
super().form_valid(form)
online_account = form.cleaned_data['online_account']
if online_account:
return redirect('../online')
else:
return redirect('../address')
我在嘗試將表單數據臨時保存到匿名用戶。有幾頁我想用匿名用戶保存到數據庫中。通過這種方式,網站的新用戶可以瀏覽前幾個表單 - 檢查我們的服務,如果他們決定之後不註冊,我可以從數據庫轉儲數據(或將其附加到會話ID)。我不想強迫用戶首先註冊。我認爲會話ID本質上是作爲匿名用戶保存到數據庫的?匿名用戶是否=會話ID – Yunti
匿名用戶沒有主鍵或任何持久性。您不能通過會話密鑰或任何其他標識符來識別它。如果要存儲會話ID,則必須爲模型添加額外的字段,然後確保用戶字段在用戶註冊時填充。另一種方法可以是自動創建用戶,但在用戶註冊之前不要將其設置爲活動狀態。這有其自身的問題(例如,您將非活動用戶的電子郵件地址和用戶名設置爲什麼?)。 – Alasdair
好吧,我認爲這是我的困惑。我認爲匿名用戶本質上是會話ID,並且如果用戶未登錄匿名用戶,則由會話ID標識。什麼是用戶ajtl? – Yunti