在不使用表单的情况下在数据库中添加数据(外键)

时间:2015-10-27 06:15:51

标签: python django forms

我正在尝试将数据添加到我的模型项目中:

class Item(models.Model):
    name = models.CharField(max_length = 70)
    description = models.TextField()
    price = models.IntegerField()
    category_id = models.ForeignKey('Category')
    type_id = models.ForeignKey('Type')
    user_id = models.ForeignKey('User')

    def __str__(self):
    return self.name

form.py:

from django import forms
from .models import User, Item, Type, Image, Category

class UserForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ('fname', 'lname', 'contact', 'username', 'password')

class ItemForm(forms.ModelForm):

    class Meta:
        model = Item
        fields = ('name', 'description', 'price', 'category_id' )

views.py

def item_add(request, pk, type_pk):
    user = get_object_or_404(User, pk=pk)
    try:
        if request.session['username'] == user.pk:

            categories = Category.objects.all()
            #type_submit is the submit button for item_add.html form. 
            #button is either [buy] or [sell]
            type_submit = get_object_or_404(Type, pk=type_pk)
            types = Type.objects.all()

            if request.method == "POST":
                form = ItemForm(request.POST)

                if form.is_valid():
                    item = form.save()
                    item.save()
                    item.objects.create(type_id=type_pk, user_id=pk)
                    return redirect('system.views.user_home', pk=pk)


            else:
                form = ItemForm()

            return render(request, 'system/item_add.html', {'form':form, 'categories': categories,
                                                        'type_submit': type_submit, 'types': types})
    except KeyError:
        return redirect('system.views.user_login')

当我点击add_item.html中的提交按钮时,没有任何反应。我的数据库中没有添加数据。我的表单中没有包含type_id和user_id(它们是外键)。因为我不想在add_item.html(表单)中显示它。我只是想在提交后直接添加它。 请帮帮我们。我对此感到疯狂。

1 个答案:

答案 0 :(得分:0)

你必须给予;

type_id = models.ForeignKey('Type', null=True, blank=True)
user_id = models.ForeignKey('User', null=True, blank=True)

这里blank = True将有助于表单提交,null = True有助于将数据保存到表

item.objects.create(type_id=type_pk, user_id=pk)

这应该改为;

item.objects.create(type_id=type_submit, user_id=user)

因为相关字段应添加对象。