2012-06-28 37 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