我得到以下的model.py
from django.db import models
class User(models.Model):
user_name = models.CharField(max_length = 50)
def __str__(self):
return self.user_name
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,)
hobby = models.CharField(max_length = 50, unique = True)
job = models.CharField(max_length = 60)
我创建了一个名为'Elvin'的用户对象实例。
我得到以下views.py
from django.shortcuts import render
from django.db import IntegrityError
from .models import User, Profile
item = { 'user': 'Elvin', 'hobby': 'horse riding', 'job': 'banker'}
def create(request):
try:
profile = Profile.objects.create(**item)
profile.save()
except IntegrityError:
pass
template = 'index.html'
thing = Profile.objects.order_by('-hobby')
context = {'thing':thing}
return render(request, template, context)
但是,它返回一个ValueError。无法指定“'Elvin'”:“Profile.user”必须是“用户”实例。
我想知道如何将我的字典数据导入到模型数据中的ForeignKey数据中?感谢。
答案 0 :(得分:0)
您的Profile
模型包含ForeignKey
模型的User
。因此,当我们尝试创建Profile
对象user
字段时,应该是User
个实例。因此,将user
中item
键的值更改为用户实例
from django.shortcuts import render
from django.db import IntegrityError
from .models import User, Profile, User
def create(request):
# create the user instance first then
# make this object as value of key in the dictionary.
user_ = User.objects.create(user_name='Elvin')
item = { 'user': user_, 'hobby': 'horse riding', 'job': 'banker'}
try:
profile = Profile.objects.create(**item)
except IntegrityError:
pass
template = 'index.html'
thing = Profile.objects.order_by('-hobby')
context = {'thing':thing}
return render(request, template, context)
注意强>
当您尝试使用profile = Profile.objects.create(**item)
创建对象时,您不需要再次调用profile.save()
,因为Profile.objects.create
隐式调用save
方法。
答案 1 :(得分:0)
在你看来试试这个,
user = User.objects.get(username='Elvin')
item = {'user': user, 'hobby': 'horse riding', 'job': 'banker'}
另一种方式是,
item = {'user': pk_of_required_user, 'hobby': 'horse riding', 'job': 'banker'}