2012-06-28 4 views
1

Я новичок в Django и просто пытаюсь отправить форму с помощью ModelForms, чтобы создать новое событие и сохранить его в базе данных.Django model.save() не записывается в базу данных

Я пытаюсь вставить строки в три таблицы: местоположение, событие (которое имеет location_id FK) и EventSchedule (который как event_id FK).

Вот метод, который сохраняет формы. Когда она вызывается, никакие ошибки не возвращаются, пока новые строки не вставляются в базу данных .:

addNewEvent() (в views.py)

def addNewEvent(self, event_form, location_form, event_sched_form, latitude, longitude): 

    new_event = event_form.save(commit=False) 
    new_location = location_form.save(commit=False) 
    new_event_sched = event_sched_form.save(commit=False) 
    # set any necessary values and save forms 
    new_location.latitude = latitude 
    new_location.longitude = longitude 
    new_location.save() 
    new_event.flagged = False 
    new_event.location = new_location 
    new_event.save() 
    new_event_sched.event = new_event 
    new_event_sched.save() 

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

Любая помощь очень ценится.

Спасибо,

Петр

EDIT:

Я даже не могу сохранить модель, не говоря уже о ModelForm (несмотря на то, что я делаю это успешно в других местах). Я добавил следующий код, чтобы связать пользователя с событием. Нет ошибок, но он не добавляет строку в базу данных:

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

Любые идеи?

EDIT 2:

Скриншот new_user_event: http://imgur.com/JUauG

EDIT 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

Вы не отправляли большую часть импорта здесь ИХМО: как же ваши формы инстанциированы? ModelForm может использоваться как для создания нового экземпляра, так и для обновления существующего. Если вы передадите существующие экземпляры в свои формы, ваш код обновит их.

+0

О! Ну, у меня нет доступа к коду на данный момент, но я думаю, что сделал это вот так: 'event_form = EventForm (request.POST или None)' – stank345

Смежные вопросы