将表单另存为外键的对象

时间:2017-01-09 01:12:52

标签: python django django-forms

有2个模型具有ForeignKey关系,Profile模型和Article模型,我希望在profile.user时将关联用户保存为Article } object已创建。

以下代码出现的错误如下:

  

'NoneType'对象没有属性'user'

models.py

class Profile(models.Model):
    name = models.CharField(max_length=120)
    user = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, blank=True)

class Gig(models.Model):
    profile = models.ForeignKey(Profile, null=True)
    title = models.CharField(max_length=100, unique=True)

以下是我要保存profile.user

视图
if request.method == 'POST':
    form = GigForm(request.POST, request.FILES)

    if form.is_valid():
        save_it = form.save()
        save_it.profile.user = request.user #error occured here.
        save_it.save()
        return redirect(reverse('own_gigs_details'))
else:
    form = GigForm()

Forms.py

class GigForm(forms.ModelForm):
    class Meta:
        model = Gig
        fields = ['title', 'image', 'body', 'price']

我做错了什么?

1 个答案:

答案 0 :(得分:1)

当您首次通过保存表单创建Gig时,没有链接到它的配置文件(因为它未在您的表单中声明)。因此,您的错误发生是因为save_it.profile没有值。

我认为您正在尝试将Gig链接到登录用户的个人资料。为此,我认为您可以这样做

save_it.profile = request.user.profile
save_it.save()

而不是分配用户自己。

OneToOneField允许您在两个方向上引用对象。所以你可以做user.profile和profile.user。