Django CreateView(CBV)をプログラムしようとしています。これは、ユーザーIDの代わりにユーザーの電子メールを受け取り、電子メールに基づいてユーザーを決定(または作成)します。
私のモデルには特別なものは何も含まれていません:
class Project(models.Model):
name = models.CharField(_('Title'), max_length=100,)
user = models.ForeignKey(User, verbose_name=_('user'),)
...
私のforms.pyは、フォームに追加の電子メールフィールドを追加します。
class ProjectCreateForm(forms.ModelForm):
email = forms.EmailField(required=True, )
class Meta:
model = Project
fields = ('name', ...,)
私のviews.pyで、ユーザーが存在するか、作成する必要があるかを判断しようとしています。どちらの場合も、ユーザーIDはProjectインスタンスの一部として保存する必要があります。
class ProjectCreateDetails(CreateView):
form_class = ProjectCreateForm
template_name = '...'
success_url = reverse_lazy('login')
model = Project
def form_valid(self, form):
try:
user = User.objects.get(email=form.email)
except User.DoesNotExist:
user = User.objects.create_user(form.email, form.email, ''.join([random.choice(string.digits + string.letters) for i in range(0, 10)]))
user.save()
form.instance.user = user
return super(ProjectCreateDetails, self).form_valid(form)
しかし、私はそのエラーに直面しています'Solution' object has no attribute 'email'
。
CreateViewではなくFormViewに切り替える必要がありますか?