我有一个问题,我一周前没有找到任何问题就找到了答案。 我想保存一个模型,使用Django User作为外键,我尝试创建一个这样的新用户:
user=User.objects.create_user(username, email, password)
然后将整个用户或用户ID设置为不起作用,就像这样:
studio_form.user_id=user
studio_form.user_id=user.id
没有任何反应,一切都保存在数据库,用户,组中,而不是用户作为外键,外键user_id每次都为空,请帮忙。
所以,这是我的代码:
Django模型:
from django.contrib.auth.models import User
class Studios(models.Model):
user_id=models.ForeignKey(User)
studio_name=models.CharField(max_length=250)
Django表格:
from django import forms
from web.models import *
class studioForm(forms.ModelForm):
class Meta:
model = Studios
exclude=('user_id')
widgets = {
'password': forms.PasswordInput(),
}
Django查看:
def studio_register(request):
if request.method == "POST":
studio_form=studioForm(request.POST, request.FILES)
if studio_form.is_valid():
studio_form.save(commit=False)
data=request.POST
username=data.get("user_name")
email=data.get("email")
password=data.get("password")
user=User.objects.create_user(username, email, password)
group=Group.objects.get(name='studio')
group.user_set.add(user)
studio_form.user_id=user.id
studio_form.save()
有什么想法吗?
答案 0 :(得分:3)
您将数据传回studio_form
:
def studio_register(request):
# other view code
studio_form.user_id=user.id
studio_form.save()
实际上,您需要将数据传递给Studios
模型,以便将其保存到数据库中。 Form
仅用于清理数据并临时保存,直到您访问模型以将数据保存到数据库。
所以,如果你是模型:
from django.contrib.auth.models import User
class Studios(models.Model):
user_id=models.ForeignKey(User)
studio_name=models.CharField(max_length=250)
您需要在视图:
中访问它def studio_register(request):
# other view code
studio = Studios.objects.create(user_id=user, studio_name=name)
这将创建一个Studios
对象,将数据保存到数据库中。
user_id
必须是User
对象(不是user.id
),因为它是User model
的外键。因此,一旦获得用户对象,只需将user_id
模型中的Studios
设置为user
即可。然而,更好的命名约定是命名字段" user" (为了避免混淆):
class Studios(models.Model):
user = models.ForeignKey(User)
请确保同时保存studio_name
,因为它是Studios
model
中的必填字段。
答案 1 :(得分:0)
我一直这样做user.groups.add(group)
可能会对你有用吗?