django - 使用外键将字典数据导入模型数据

时间:2018-03-10 04:38:53

标签: python django

我得到以下的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数据中?感谢。

2 个答案:

答案 0 :(得分:0)

您的Profile模型包含ForeignKey模型的User。因此,当我们尝试创建Profile对象user字段时,应该是User个实例。因此,将useritem键的值更改为用户实例

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'}