【发布时间】:2020-08-22 02:13:30
【问题描述】:
我的 OneToOneField 不断返回 None。我尝试访问我的网站,以便表单可以自动将帖子的作者作为当前登录的人。我环顾四周,发现 OneToOneField 可以做到这一点。当我实际上在 User 模型中有用户时,它会一直返回 None 。地球上发生了什么?
Models.py: - 这是主要问题发生的地方
from django.db import models
from datetime import datetime
from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
from django.conf import settings
from django.contrib.auth import get_user_model
class MainPost(models.Model):
post_author = models.OneToOneField(User, on_delete=models.CASCADE)
post_title = models.CharField(max_length=200)
post_content = models.TextField()
post_published = models.DateTimeField("date published", default=datetime.now())
def __str__(self):
return self.post_title
class MainPostForm(ModelForm):
class Meta:
model = MainPost
fields = ["post_title", "post_content", "post_author"]
readonly_fields = "post_published"
Views.py - 重要的是底部的 create_request()
from django.shortcuts import render, redirect
from django.shortcuts import render, redirect
from django import forms
from django.http import HttpResponse
from django.views.generic import CreateView
from django.contrib.auth.forms import AuthenticationForm
from .models import MainPost, MainPostForm
from .forms import NewUserForm
from django.contrib import messages
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.models import User
from datetime import datetime
def homepage(request):
return render(request, template_name="trymysite/home.html", context=
{"posts":MainPost.objects.order_by('-post_published')})
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get("username")
messages.success(request, f"New Account Created: {username}")
login(request, user)
messages.info(request, f"You are now logged in as {username}")
return redirect("mymainapp:homepage") # Goes to urls and to the homepage path
else:
for msg in form.error_messages:
messages.error(request, f"{msg}: {form.error_messages[msg]}")
form = NewUserForm
return render(request, "trymysite/register.html", context={"form": form})
def login_request(request):
if request.method == "POST":
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
messages.info(request, f"You are now logged in as {username}")
return redirect("mymainapp:homepage")
else:
messages.error(request, "Invalid username or passowrd!")
else:
messages.error(request, "Invalid username or passowrd!")
form = AuthenticationForm()
return render(request, "trymysite/login.html", {"form":form})
def logout_request(request):
logout(request)
messages.info(request, "Logged out Successfully!")
return redirect("mymainapp:homepage")
def create_request(request):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = MainPostForm(request.POST)
# check whether it's valid:
if form.is_valid():
form.save()
return redirect("mymainapp:homepage")
form = MainPostForm()
return render(request, "trymysite/create.html", {"form":form})from django import forms
Forms.py - 这是用户注册的一部分,以防出现问题
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(NewUserForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
请帮忙
【问题讨论】:
-
首先把
default=datetime.now()改成default=datetime.now