2012-06-28 38 views
1

我是Django的新手,只是尝试使用ModelForms提交表单来创建新事件并将其保存到数据库。Django model.save()不写入数据库

我想插入到三个表中的行:位置,事件(它有一个location_id FK)和EventSchedule(它作为event_id FK)。

这里是保存表单的方法。当它被调用时,返回任何错误,但新的行不插入到数据库:

addNewEvent()(在views.py)

​​

models.py

class Location(models.Model): 
    name = models.CharField(max_length=200) 
    #address = models.CharField(max_length=200) 
    city = models.CharField(max_length=200) 
    state_code = models.CharField(max_length=100) 
    zip = models.CharField(max_length=100, blank=True) 
    country = models.CharField(max_length=100) 
    latitude = models.DecimalField(max_digits=9, decimal_places=6) 
    longitude = models.DecimalField(max_digits=9, decimal_places=6) 
    class Meta: 
     db_table = 'location' 

class Event(models.Model): 
    CATEGORIES = (
     ('KID', 'Kids'), 
     ('FAM', 'Family'), 
     ('NIT', 'Nightlife'), 
     ('OUT', 'Outdoors'), 
     ('ART', 'Arts'), 
     ('MSC', 'Music'), 
     ('SPT', 'Sports'), 
     ('SAL', 'Sale'), 
     ('EDU', 'Educational'), 
     ('POL', 'Political'), 
     ('FOD', 'Food'), 
     ('OTH', 'Other') 
    ) 
    location = models.ForeignKey(Location) 
    name = models.CharField(max_length=200) 
    description = models.CharField(max_length=200) 
    category = models.CharField(max_length=20, choices=CATEGORIES) 
    age_req = models.IntegerField(null=True) 
    cost_per_person = models.DecimalField(max_digits=5, decimal_places=2, null=True) 
    flagged = models.BooleanField() 
    users = models.ManyToManyField(User, through='UserEvent') 
    class Meta: 
     db_table = 'event' 

class EventSchedule(models.Model): 
    event = models.ForeignKey(Event) 
    start_date_time = models.DateTimeField() 
    end_date_time = models.DateTimeField() 
    class Meta: 
     db_table = 'event_schedule' 

forms.py

从django.forms进口的ModelForm,从模型导入事件,地点形成 ,EventSchedule

class EventForm(ModelForm): 
    class Meta: 
     model = Event 
     fields = ('name','description','category','age_req','cost_per_person') 

class LocationForm(ModelForm): 
    class Meta: 
     model = Location 
     fields = ('name','city','state_code','zip','country') 

class EventScheduleForm(ModelForm): 
    class Meta: 
     model = EventSchedule 
     fields = ('start_date_time', 'end_date_time') 

任何帮助深表感谢。

谢谢

彼得

编辑:

我甚至不能保存模型,更别说的ModelForm(即使我在其他地方成功地做这件事)。我添加了以下代码以将用户与事件相关联。没有错误,但它没有添加一行数据库:

new_user_event = UserEvent(user=user, 
           event=new_event, 
           datetime_created=datetime.datetime.now()) 
new_user_event.save() 

任何想法?

编辑2:

截图new_user_event的:http://imgur.com/JUauG

编辑3:

这是我如何实例化ModelForms:

event_form = EventForm(request.POST or None) 
location_form = LocationForm(request.POST or None) 
event_sched_form = EventScheduleForm(request.POST or None) 

回答

14

哇,我真是个白痴。在我实际显示事件之前,我正在删除表中的行,这是由于某些代码使用虚拟数据填充数据库。

我可以删除这个问题吗?或者它应该作为我的愚蠢证据吗?

+3

如果它让你感觉好一点,这个问题/答案帮助我们调试了Jenkins服务器上的类似情况。所以你的回答至少帮助了一个人! – keithhackbarth

0

你没在这里发表最进口部分IHMO:你的形式实例化? ModelForm可用于创建新实例或更新现有实例。如果你将现有的实例传递给你的表单,那么你的代码只会更新它们。

+0

哦!那么,我目前无法访问代码,但我认为我是这样做的: 'event_form = EventForm(request.POST or None)' – stank345